使用正则表达式查找和替换xml文档中的文本

时间:2012-03-30 19:35:29

标签: c# regex

我正在使用c#console app来获取xml文档。现在一旦加载了xmldocument,我想搜索特定的href标签:

href="/abc/def

在xml文档中。

一旦找到该节点,我想完全剥离标签,只显示Hello。

<a href="/abc/def">Hello</a>

我想我可以简单地使用正则表达式获取标签。但有人可以告诉我如何使用正则表达式完全删除href标签?

3 个答案:

答案 0 :(得分:1)

xml&amp; html相同的区别:标记的内容。 xml的格式更严格。 对于这个用例,我将使用转换和xpath查询重建文档。正如@Yahia所说,标记文档的正则表达式通常是一个坏主意。解析的正则表达式很复杂,无法作为通用解决方案。

答案 1 :(得分:0)

用于类似任务的最流行的技术称为XPath。 (它也是XQuery和XSLT的关键组件。)以下是否也可以解决您的任务?

root.SelectSingleNode("//a[@href='/abc/def']").InnerText = "Hello";

答案 2 :(得分:0)

你可以尝试

string x = @"<?xml version='1.0'?> 
 <EXAMPLE>  
    <a href='/abc/def'>Hello</a> 
 </EXAMPLE>";

 System.Xml.XmlDocument doc = new XmlDocument();
 doc.LoadXml(x);
 XmlNode n = doc.SelectSingleNode("//a[@href='/abc/def']");
 XmlNode p = n.ParentNode;
 p.RemoveChild(n);
 System.Xml.XmlNode newNode = doc.CreateNode("element", "a", "");
 newNode.InnerXml = "Hello";
 p.AppendChild(newNode);

不确定这是否是你想要做的,但它应该足以让你朝着正确的方向前进。