我有一个xml文档,如下所示:
<nodes> <node idName="employee">Some Text Here "employee" idName="employee" employee<innderNode idName="manager">Some Manager Text Here manager manager "manager" </innerNode> </node> </nodes>
如何将“employee”替换为“supervisor”并将“manager”替换为“employee”仅在属性中?
谢谢, 克
答案 0 :(得分:0)
正则表达式无法处理XML所属的语言类。然而,当然有一种hacky方式:
idName="something"
- 包括等号和引号 - 并将其替换为idName="somethingelse"
但是,当上面显示的确切字符串确定不会在任何XML元素主体中显示为文本时,这当然仅有效。如果是这种情况,那么就没有办法引导正确的XML解析器。
虽然现代正则表达式通常可以处理超过常规语言,但只能处理这么多。您将需要一个无上下文语法来解析XML。
答案 1 :(得分:0)
我同意在理想的世界中,您应该使用正确的XML解析器。
然而,世界并不理想,正如你需要的那样,正则表达式可以解决这个问题。 这是一个可以使用perl / sed的例子,它应该很容易转换为任何语言:
s/<node idName="employee">(.*?)<\/node>/<node idName="supervisor">$1<\/node>/g
这可以很容易地修改为包含其他属性,它看起来像这样:
s/<node (.*?idName=)"employee"(.*?)>(.*?)<\/node>/<node $1"supervisor"$2>$3<\/node>/g
依此类推,如果XML包含大块内存,请注意它对内存的渴望。