正则表达式在xml中添加名称空间前缀

时间:2015-03-26 06:13:01

标签: java regex preg-match

我被困在某一点。我有一个没有前缀的xml。 我试图通过正则表达式放置前缀。 我的xml如下所示: -

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tier="http://xxxx">
<soapenv:Header/>
<soapenv:Body>
  <tier:UnisysMB_Dispatch>
     <PayLoad>
    <XMLTransaction>
        <Source_Identifier>WFM.MSM.SR</Source_Identifier>
        </XMLTransaction></PayLoad>
  </tier:UnisysMB_Dispatch>
</soapenv:Body>
</soapenv:Envelope>

但我希望带有名称空间前缀的xml与每个标记(s1)如下所示:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"   xmlns:tier="http://xxxx" s1="someurl">
<soapenv:Header/>
<soapenv:Body>
  <tier:UnisysMB_Dispatch>
     <s1:PayLoad>
    <s1:XMLTransaction>
        <s1:Source_Identifier>WFM.MSM.SR</s1:Source_Identifier>
        <s1:/XMLTransaction></s1:PayLoad>
  </tier:UnisysMB_Dispatch>
</soapenv:Body>
</soapenv:Envelope>

我试过这个 search regex =“(&lt; \ /?)[a-z0-9] +”; replace = s1:“$ 1” 但没有工作..

任何帮助吗??

1 个答案:

答案 0 :(得分:1)

(</?)(\w+)>替换为$1s1:$2>。现在这应该只能在IDE中正常工作。

对于第一行,您必须使用另一个正则表达式。 (<soapenv:Envelope.*?)> $1 s1="someUrl">。{/ p>

我同意其他评论,正则表达式解析不是从XML中提取信息的最佳方法。实际上这不是解析,而是替换。这应该适用于小例子。

如果您需要适用于可变数量WSDL的强大解决方案,则应切换到XML解析器/重写器。我认为一些XML-Tools可以直接支持你的问题。