首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用正则表达式替换xml标记

用正则表达式替换xml标记
EN

Stack Overflow用户
提问于 2010-04-17 03:34:25
回答 3查看 6.6K关注 0票数 1

如何将xml文件中的某个部分替换为已定义的字符串?

代码语言:javascript
复制
<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>

更换结果类似的所有声卡部件:

代码语言:javascript
复制
<tag1></tag2>
<tag2></tag2>
...etc
{0}
<tag5></tag5>

我使用的是c# .net 3.5,我考虑使用正则表达式解决方案

EN

回答 3

Stack Overflow用户

发布于 2010-04-17 04:19:33

如果它必须是正则表达式,那么您的XML文件是格式良好的,并且您知道(比方说,从DTD中) <soundcard>标记不能嵌套,那么可以使用

代码语言:javascript
复制
(<soundcard.*?</soundcard>\s*)+

并将全部替换为{0}

在C#中:

代码语言:javascript
复制
resultString = Regex.Replace(subjectString, @"(<soundcard.*?</soundcard>\s*)+", "{0}", RegexOptions.Singleline);

对于一次性问题的快速修复,我认为这是可以的。一般来说,认为regex是处理XML的适当工具是不好的。

票数 3
EN

Stack Overflow用户

发布于 2010-04-17 03:44:49

就我个人而言,我会使用Linq to XML并删除实体,并将其替换为文本节点。

标准时间2010年4月16日下午4:40更新

这里有一个Linq to XML的例子,我有点生疏了,但它至少应该让你对这是如何做到的有一个概念。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2010-04-17 03:43:54

我的建议是使用XSLT转换来替换您想要替换为已知标签的标签,然后使用String.Replace('','{0}');。

我附和约翰尼斯所说的,不要试图构建REs来做到这一点。随着XML变得越来越复杂,错误率也会增加。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2655658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档