html에서 특정 클래스 이름을 제거해야합니다. 예를 들면 다음과 같습니다.
<table class="removeme"></table>
청소 후 지정한 클래스 "removeme"및 html을 제거 할 수있는 코드를 잘라야합니다.
<table></table>
또한 전달 된 HTML에는 다음과 같은 내용이 포함될 수 있음을 명심하십시오.
<table class="removeme leaveme"></table>
청소 후에는 다음과 같이 나타납니다.
<table class="leaveme"></table>
이것을 두 단계로 처리 할 수 있습니다. 먼저 'removeme` 클래스 속성 만있는 모든 노드를 가져온 다음 모든 클래스 속성을 제거하십시오.
//*[normalize-space(@class)='removeme']
다음 단계에서 removeme
클래스와 다른 클래스를 가진 모든 노드를 얻은 다음 클래스 속성에서 removeme
를 제거합니다.
//*[
normalize-space(@class)!='removeme'
and
contains(concat(' ', normalize-space(@class), ' '), ' removeme ')
]
위의 XPath의 첫 번째 조건은 1 단계에서 처리되지 않은 모든 노드를 가져오고 두 번째 조건은 CSS 선택기 .removeme
해당하는 XPath입니다.
다음은 완전한 콘솔 예제입니다.
var xml = @"<root>
<table class=""removeme""></table>
<table class=""removeme leaveme""></table>
<table class="" removeme ""></table>
</root>";
var doc = new HtmlDocument();
doc.LoadHtml(xml);
var removemeOnly = doc.DocumentNode.SelectNodes("//*[normalize-space(@class)='removeme']");
foreach (HtmlNode node in removemeOnly)
{
node.Attributes["class"].Remove();
}
var containsRemoveme =
doc.DocumentNode.SelectNodes("//*[normalize-space(@class)!='removeme' and contains(concat(' ', normalize-space(@class), ' '), ' removeme ')]");
foreach (HtmlNode node in containsRemoveme)
{
node.Attributes["class"].Value = node.Attributes["class"].Value.Replace("removeme", "");
}
//print formatted HTML output (don't use this for non XML-compliant HTML)
Console.WriteLine(XDocument.Parse(doc.DocumentNode.OuterHtml));