[仅当子元素标签值匹配时才从XML列表中选择XML

问题描述 投票:0回答:1

对于Xml的给定列表

<ns:Input>
<ns:location>asfsafs</ns:location>
<ns:locationevent>xxxx</ns:locationevent>
<ns:Action>
<ns:name>abc</ns:name>
</ns:Action>
<ns:Action>
<ns:name>ghy</ns:name>
</ns:Action>
<ns:Coverage>
<ns:Action>
<ns:name>deg</ns:name>
</ns:Action>>
</ns:Coverage>
<ns:ID>12133</ns:ID>
</ns:Input>

<ns:Input>
<ns:location>asfsafs</ns:location>
<ns:locationevent>yyyy</ns:locationevent>
<ns:Action>
<ns:name>abc</ns:name>
</ns:Action>
<ns:Action>
<ns:name>def</ns:name>
</ns:Action>
<ns:Coverage>
<ns:Action>
<ns:name>def</ns:name>
</ns:Action>
</ns:Coverage>
<ns:ID>12233</ns:ID>
</ns:Input>

<ns:Input>
<ns:location>asfsafs</ns:location>
<ns:locationevent>yyyy</ns:locationevent>
<ns:Action>
<ns:name>abc</ns:name>
</ns:Action>
<ns:Action>
<ns:name>def</ns:name>
</ns:Action>
<ns:Coverage>
<ns:Action>
<ns:name>def</ns:name>
</ns:Action>
</ns:Coverage>
<ns:ID>1423</ns:ID>
</ns:Input>


<ns:Input>
<ns:location>asfsafs</ns:location>
<ns:locationevent>xxxx</ns:locationevent>
<ns:Action>
<ns:name>abc</ns:name>
</ns:Action>
<ns:Action>
<ns:name>ghy</ns:name>
</ns:Action>
<ns:Coverage>
<ns:Action>
<ns:name>deg</ns:name>
</ns:Action>>
</ns:Coverage>
<ns:ID>12</ns:ID>
</ns:Input>

我只选择符合以下条件的XML在此处输入代码

<ns:Input>..<ns:locationevent>yyyy</ns:locationevent>..<ns:Action>..<ns:name>def</ns:name>..
<ns:Input>..<ns:Coverage>..<ns:Action>..<ns:name>def</ns:name>..<ns:ID>1423</ns:ID>..</ns:Input>

如果在记事本++中使用以下命令,

<ns:Input>(?:(?!</ns:Input>).)*<ns:locationevent>yyyy</ns:locationevent.*?<ns:Action>.*? 
<ns:name>def</ns:name>.*?<ns:Coverage>.*?<ns:Action>.*?<ns:name>def</ns:name>(?:(?!</ns:Input>).)* 
 (1423).*?</ns:Input>

它同时选择第二个和第三个XMls。它应该只选择了符合以上条件的第三个XML。

您能帮忙吗?这应该在Notepad ++正则表达式中完成。

xml xml-parsing notepad++ extract parent
1个回答
0
投票

[在Notepad ++中添加XML Tools插件,评估以下xpath表达式并查看其是否有效:

//ns:Input[//ns:name[text()='def']][ns:locationevent[text()='yyyy']][ns:ID[text()='1423']]
© www.soinside.com 2019 - 2024. All rights reserved.