簡體   English   中英

如何確定哪個HTML是“代碼”,哪個是“顯示/內容”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM