在进行正则表达式搜索和替换时跳过XML内容

时间:2012-09-18 10:03:54

标签: xml regex full-text-search xsd search-engine

我有一个xml字符串,如下所示

<root>
    <A id="1">This is an example</A>
    <B id="2">
            <C id="3">this is tag c</C>
    </B>
    <D id="4">this is tag d</D>
    <E id="5">
            <F id="6">this is tag f</F>
            <G id="7">this is tag g</G>
               .
               .
               .
    </E>
</root>

这里我只想搜索单词tag并使用正则表达式(正则表达式)将其替换为Xml Tag,我不想在元素<E>...</E>内搜索该单词,即我想在搜索和替换时跳过元素<E>...</E>

感谢任何帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

执行此操作的最简单方法因您的环境和您的意思而异,具体而言,您希望跳过元素E.在XSLT或XQuery中,一种查找与正则表达式匹配的文本节点的简单方法E元素将是

//text()[not(ancestor::E)][matches(.,'tag')]

在其他环境中,做一些类似的事情可能会也可能不方便。

请注意,如果“跳过元素E”表示您需要表单内容

<A>This is a tricky example
   of the word t<E>hi, mom!</E>ag.</A>

要在搜索“tag”时返回一个匹配,那么您将需要一个更复杂的解决方案。