[英]How to determine which HTML is “code” and which is “display/content”?
我想使用C#解析HTML數據。
如果您認為HTML數據的每個字符都有點:true =“ html / code”。 false =“顯示/內容”。 然后,您將知道HTML的哪一部分是“代碼”。
讓我們使用以下HTML示例:
<a id="a1" class="c1" attr1="x" attr2="y">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>
我想做一個C#String.Replace查找“ a1”的所有實例,並將其替換為“ new1”。 我想做一個C#String.Replace以查找“ attr1”的所有實例,並將其替換為“ new2”。 但是我只希望HTML“代碼”受到影響,並且我希望所有“內容”都不會被更改。 理想的結果是:
<a id="new1" class="c1" new2="x" attr2="y">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>
注意:期望的結果還有其他兩個未重命名的“ a1”實例。 注意:期望的結果還有其他兩個“ attr1”實例未重命名。
我找不到任何有助於此工作的現有庫或軟件。
編輯1:HtmlAgilityPack可能是一個選項。 但是,我仍然不了解如何使用它來區分代碼和非代碼?
EDIT2:請記住,這個問題盡可能簡化了我的實際問題。 重命名帶引號和不帶引號的內容將不是答案。 我特別需要弄清楚如何區分代碼和非代碼。
EDIT3:我已將“ attr1”作為輔助String.Replace包括在內。 我需要找到要替換的屬性和屬性值。 而且我需要能夠區分代碼和非代碼。
有什么建議么?
在對這篇文章發表評論之后,我提出了以下建議:
void Main()
{
var html = "<a id=\"attr1\" class=\"c1\" attr1=\"x\" attr2=\"y\">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>";
var res = Replace(html, "attr1", "attrA");
}
public string Replace(string html, string oldval, string newval)
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
foreach (var n in doc.DocumentNode.ChildNodes)
{
foreach (var a in n.Attributes)
{
if (a.Value.Equals(oldval))
{
a.Value = newval;
}
if (a.Name.Equals(oldval))
{
a.Name = newval;
}
}
}
return doc.DocumentNode.OuterHtml;
}
給定輸入:
<a id="attr1" class="c1" attr1="x" attr2="y">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>
輸出為:
<a id="attrA" class="c1" attra="x" attr2="y">a1 c1 attr1</a> <p>a1 c1 attr1 attr2</p>
這應該滿足當前的要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.