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

C# 使用正则表达式查找和替换xml文档中的文本,c#,regex,C#,Regex,我正在使用c#控制台应用程序获取xml文档。现在,加载xmldocument后,我要搜索特定的href标记: href="/abc/def 在xml文档中 一旦找到了那个节点,我想完全去掉标签,只显示Hello <a href="/abc/def">Hello</a> 我想我可以简单地使用regex获得标签。但是有谁能告诉我如何使用regex完全删除href标记吗?xml&html相同的区别:标记的内容。xml的格式更严格。 对于这个用例,我将使用转换和xpath

我正在使用c#控制台应用程序获取xml文档。现在,加载xmldocument后,我要搜索特定的href标记:

href="/abc/def
在xml文档中

一旦找到了那个节点,我想完全去掉标签,只显示Hello

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


我想我可以简单地使用regex获得标签。但是有谁能告诉我如何使用regex完全删除href标记吗?

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

xml和html相同的区别:标记的内容。xml的格式更严格。
对于这个用例,我将使用转换和xpath查询来重建文档。正如@Yahia所说,在标记文档上使用正则表达式通常是个坏主意。用于解析的正则表达式远比一般解决方案复杂得多。

用于类似任务的最流行技术是XPath。(它也是XQuery和XSLT的一个关键组件)下面的内容是否也能解决您的任务

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

用于类似任务的最流行技术称为XPath。(它也是XQuery和XSLT的一个关键组件)下面的内容是否也能解决您的任务

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

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);
string x=@”
";
System.Xml.XmlDocument doc=新的XmlDocument();
doc.LoadXml(x);
XmlNode n=doc.SelectSingleNode(“//a[@href='/abc/def']”);
xmlnodep=n.ParentNode;
p、 去核细胞(n);
System.Xml.XmlNode newNode=doc.CreateNode(“元素”、“a”和“);
newNode.InnerXml=“你好”;
p、 追加子节点(newNode);
不太确定这是否是你想要做的,但这应该足以让你朝着正确的方向前进

你可以试试

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);
string x=@”
";
System.Xml.XmlDocument doc=新的XmlDocument();
doc.LoadXml(x);
XmlNode n=doc.SelectSingleNode(“//a[@href='/abc/def']”);
xmlnodep=n.ParentNode;
p、 去核细胞(n);
System.Xml.XmlNode newNode=doc.CreateNode(“元素”、“a”和“);
newNode.InnerXml=“你好”;
p、 追加子节点(newNode);

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

使用regex处理这类东西是个坏主意,如果你处理的是HTML,那么我建议使用HTML Agility pack…可能是@KenWhite的副本-这是我所看到的完全不同的问题。但对我的问题没有帮助。@Yahia-这不是html,我正在xml文档中加载xml文件,希望找到特定链接并删除@nearome,如果您可以显示您的xml,我想你可以得到更好的答案使用regex来处理这类事情是个坏主意,如果你处理的是HTML,那么我建议你使用HTML Agility pack…可能是@KenWhite的副本-这与我所看到的问题完全不同。但是对我的问题没有帮助。@Yahia-这不是html,我正在xml文档中加载xml文件,希望找到特定的链接并删除@nearome,如果您可以显示您的xml,我想您可以得到更好的答案