如何用定义的字符串替换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而且我正在使用正则表达式解决方案
答案 0 :(得分:3)
如果 是正则表达式,那么您的XML文件格式正确,并且知道(例如,来自DTD)<soundcard>
标签不能嵌套,那么你可以使用
(<soundcard.*?</soundcard>\s*)+
并将所有内容替换为{0}
。
在C#中:
resultString = Regex.Replace(subjectString, @"(<soundcard.*?</soundcard>\s*)+", "{0}", RegexOptions.Singleline);
对于一次性问题的快速修复,我认为没问题。将regex视为处理XML的正确工具是不行的。
答案 1 :(得分:2)
我个人会将Linq用于XML并删除实体并将其替换为文本节点。
2010年4月16日下午4:40 MST
这是Linq to 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);
答案 2 :(得分:1)
我的建议是使用XSLT转换来替换你想用已知标签替换的标签,比如说,然后是String.Replace('','{0}');.
我回应约翰内斯所说的,不要试图建立RE来做到这一点。随着XML变得越来越复杂,错误率将会增加。