C# 用正则表达式替换xml标记

C# 用正则表达式替换xml标记,c#,xml,regex,C#,Xml,Regex,如何用定义的字符串替换xml文件中的某个部分 <tag1></tag2> <tag2></tag2> ...etc <soundcard num=0> <name>test123</name> </soundcard> <soundcard num=1> <name>test123</name> </soundcard> <soundcard

如何用定义的字符串替换xml文件中的某个部分

<tag1></tag2>
<tag2></tag2>
...etc
<soundcard num=0> 
<name>test123</name>
</soundcard>
<soundcard num=1> 
<name>test123</name>
</soundcard>
<soundcard num=2> 
<name>test123</name>
</soundcard>
<tag5></tag5>
更换结果如下所示的所有声卡部件:

<tag1></tag2>
<tag2></tag2>
...etc
{0}
<tag5></tag5>

我使用的是c.net 3.5,我认为正则表达式解决方案

我的建议是使用XSLT转换将要替换的标记替换为已知标记,然后使用String.replace,“{0};”


我赞同约翰内斯所说的,不要试图建立REs来实现这一点。随着XML变得越来越复杂,错误率也会增加。

我的建议是使用XSLT转换将要替换的标记替换为已知标记,例如,然后使用String.replace,“{0};”


我赞同约翰内斯所说的,不要试图建立REs来实现这一点。随着XML变得越来越复杂,错误率也会增加。

我个人会使用Linq转换XML,删除实体并用文本节点替换它

更新日期:2010年4月16日下午4:40 MST

这里是一个Linq到XML的示例,我有点生疏,但它至少应该让您了解如何实现这一点

XElement root = XElement.Load("myxml.xml");

var soundcards = select el from root.Elements() where el.Name == "soundcard" select el;
var prev_node = soundcards.First().PreviousNode;

// Remove Nodes
foreach(XElement card in soundcards)
    card.Remove();

// Build your content here into a variable called newChild

prev_node.AddAfterSelf(newChild);

就我个人而言,我会使用LINQtoXML,删除实体并用文本节点替换它

更新日期:2010年4月16日下午4:40 MST

这里是一个Linq到XML的示例,我有点生疏,但它至少应该让您了解如何实现这一点

XElement root = XElement.Load("myxml.xml");

var soundcards = select el from root.Elements() where el.Name == "soundcard" select el;
var prev_node = soundcards.First().PreviousNode;

// Remove Nodes
foreach(XElement card in soundcards)
    card.Remove();

// Build your content here into a variable called newChild

prev_node.AddAfterSelf(newChild);
如果必须是正则表达式,那么您的XML文件是格式良好的,并且您知道,比如说,从DTD可以看出标记不能嵌套,那么您可以使用

(<soundcard.*?</soundcard>\s*)+
对于一次性问题的快速而肮脏的修复,我认为这没关系。一般来说,认为正则表达式是处理XML的合适工具是不合适的。

如果它必须是正则表达式,那么您的XML文件是格式良好的,并且您知道,从DTD可以看出标记不能嵌套,那么您可以使用

(<soundcard.*?</soundcard>\s*)+

对于一次性问题的快速而肮脏的修复,我认为这没关系。一般来说,认为正则表达式是处理XML的合适工具是不合适的。

No不要使用正则表达式来解析、修改或以其他方式处理XML和其他非正则语言,如HTML、JSON、YAML等。。。。正确的解决方法是使用XML API来解析和修改文档树,不管你喜欢什么。@Johannes:你的意思是不要这样做。!值得注意的是,有多少人试图用正则表达式解析XML/HTML…@SLaks:Argh,是的;不过,现在修复输入错误已经太迟了。不,不要使用正则表达式来解析、修改或以其他方式处理XML和其他非正则语言,如HTML、JSON、YAML等等。。。。正确的解决方法是使用XML API来解析和修改文档树,不管你喜欢什么。@Johannes:你的意思是不要这样做。!值得注意的是,有多少人试图用正则表达式解析XML/HTML…@SLaks:Argh,是的;不过,现在纠正一个拼写错误已经太迟了。