如何将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,我考虑使用正则表达式解决方案
发布于 2010-04-17 04:19:33
如果它必须是正则表达式,那么您的XML文件是格式良好的,并且您知道(比方说,从DTD中) <soundcard>标记不能嵌套,那么可以使用
(<soundcard.*?</soundcard>\s*)+并将全部替换为{0}。
在C#中:
resultString = Regex.Replace(subjectString, @"(<soundcard.*?</soundcard>\s*)+", "{0}", RegexOptions.Singleline);对于一次性问题的快速修复,我认为这是可以的。一般来说,认为regex是处理XML的适当工具是不好的。
发布于 2010-04-17 03:44:49
就我个人而言,我会使用Linq to XML并删除实体,并将其替换为文本节点。
标准时间2010年4月16日下午4:40更新
这里有一个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);发布于 2010-04-17 03:43:54
我的建议是使用XSLT转换来替换您想要替换为已知标签的标签,然后使用String.Replace('','{0}');。
我附和约翰尼斯所说的,不要试图构建REs来做到这一点。随着XML变得越来越复杂,错误率也会增加。
https://stackoverflow.com/questions/2655658
复制相似问题