代码之家  ›  专栏  ›  技术社区  ›  Daveo

XML/XHTML替换内容?

  •  1
  • Daveo  · 技术社区  · 16 年前

    我有一个XHTML字符串要替换其中的标记 例如

    <span tag="x">FOO</span> 
    <span tag="y"> <b>bar</b> some random text <span>another span</span> </span>
    

    我希望能够找到tag=“x”并用我自己的内容替换FOO 并找到tag=y,将所有内部内容替换为byown内容。

    最好的方法是什么?我想regex绝对是不可能的。 XPATH能做这个还是那个仅仅是为了搜索它能做操作?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Dean Harding    16 年前

    如果您确定内容是XHTML(即格式良好的XML),那么XPath当然可以做到这一点。

    var doc = new XmlDocument();
    doc.LoadXml("<span tag=...");
    
    foreach(var node in doc.SelectNodes("//span[tag=x]"))
    {
        node.InnerXml = "New Content";
    }
    foreach(var node in doc.SelectNodes("//span[tag=y]"))
    {
        node.InnerXml = "Different Content";
    }
    
        2
  •  0
  •   Tomas Petricek    16 年前

    真正地

    • 如果没有,那么您需要将它们解析为HTML,这可以使用 Html Agility Pack .
    • 如果是,则可以将其视为XML,并使用标准的.NET类对其进行解析。

    第二种情况可以像这样使用LINQ到XML:

    var xs = from span in doc.Descendant("span")
             let tag = span.Attribute("tag")
             where tag != null && tag.Value == "x" select span;
    forach(var x in xs) x.Value = "BAR!";
    

    明显的好处是,与使用正则表达式的解决方案相比,这种方法更具可读性和可维护性。htmlagility包提供了一个类似的API(尽管我不熟悉如何编写示例)。

    推荐文章