我有一个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并用自己的内容替换所有内部内容。
最好的方法是什么?我认为正则表达式绝对是不可能的。 XPATH可以这样做,还是只是为了搜索它可以进行操作吗?
答案 0 :(得分:4)
如果您确定内容是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";
}
答案 1 :(得分:0)
你肯定可以使用正则表达式(这是一个字符串操作),但这可能会有点讨厌,因为HTML可能非常复杂。但是,这当然是一种可能的方法。
另一种方法是将XHTML页面解析为一些结构化的hieararchy,然后进行处理。问题是页面是否真正有效的XML。 XHTML规范要求,但如果您从互联网上选择声称是XHTML的随机页面,您可能会遇到麻烦。
第二种情况可以使用LINQ to 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!";
显而易见的好处是,这比使用正则表达式的解决方案更具可读性和可维护性。 Html Agility Pack提供了类似的API(虽然我不熟悉它来编写示例)。