gpt4 book ai didi

xml - XPath 查询以选择没有特定属性的特定值的任何后代

转载 作者:数据小太阳 更新时间:2023-10-29 02:12:16 26 4
gpt4 key购买 nike

我一直在尝试构建一个基本上选择所有内容但排除某些节点的 XPath 查询。

这是我正在处理的 XML:

<?xml version="1.0" encoding="UTF-8"?>

<task>
<title id="30014">Instructions</title>
<taskbody>
<context>
<p>Your box has a document.</p>
<p audience="print">To get the document:</p>
<p audience="web">
<xref href="/node/6308" scope="external">Click here</xref> to get the document.
</p>
</context>
<steps audience="print">
<step>
<cmd>Go to
<u>www.google.com</u>.
</cmd>
</step>
<step>
<cmd>Click on the “Resource” button.</cmd>
<info>
<fig frame="all">
<image href="resource.ai" height="1.650in" width="4.500in"/>
</fig>
</info>
</step>
<step>
<cmd>Click on “Manuals”.</cmd>
</step>
<step>
<cmd>Click on “Shipping”.</cmd>
</step>
<step>
<cmd>You can save or print it from your browser window.</cmd>
</step>
</steps>
</taskbody>
</task>

我需要选择观众不等于“打印”的所有内容。

我一直在尝试我阅读过的各种方法,但似乎没有一个能完全按照我需要的方式工作。

这是最新的一个接近但不完全的:

task/taskbody//*[not(@audience = "print")]

问题是,它可以很好地去除具有“打印”值的下一级节点。然而,第一个 <p>具有“打印”值的在 <context> 内.该节点似乎永远不会被选中。

查询结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<result>
<context>
<p>Your box has a document.</p>
<p audience="print">To get the document:</p>
<p audience="web">
<xref href="/node/6308" scope="external">Click here</xref> to get the document.
</p>
</context>

<p>Your box has a document.</p>

<p audience="web">
<xref href="/node/6308" scope="external">Click here</xref> to get the document.
</p>

<xref href="/node/6308" scope="external">Click here</xref>

<step>
<cmd>Go to
<u>www.google.com</u>.
</cmd>
</step>

<cmd>Go to
<u>www.google.com</u>.
</cmd>

<u>www.google.com</u>

<step>
<cmd>Click on the “Resource” button.</cmd>
<info>
<fig frame="all">
<image height="1.650in" href="resource.ai" width="4.500in"/>
</fig>
</info>
</step>

<cmd>Click on the “Resource” button.</cmd>

<info>
<fig frame="all">
<image height="1.650in" href="resource.ai" width="4.500in"/>
</fig>
</info>

<fig frame="all">
<image height="1.650in" href="resource.ai" width="4.500in"/>
</fig>

<image height="1.650in" href="resource.ai" width="4.500in"/>

<step>
<cmd>Click on “Manuals”.</cmd>
</step>

<cmd>Click on “Manuals”.</cmd>

<step>
<cmd>Click on “Shipping”.</cmd>
</step>

<cmd>Click on “Shipping”.</cmd>

<step>
<cmd>You can save or print it from your browser window.</cmd>
</step>

<cmd>You can save or print it from your browser window.</cmd>

</result>

它抓取没有属性的节点,它抓取带有“web”的节点以及除了那个以外的大多数带有“print”的节点。

有什么建议吗?

最佳答案

这个表达式将选择所有没有任何 @audience 的元素属性,以及那些包含一个不是字符串 print 的值的属性:

//*[not(descendant::*[@audience='print']) and not(ancestor-or-self::*[@audience='print'])]

上面的写法会选择<title> , 第一和第三 <p> <context> 的 children .它不会选择 <steps>或第二个<p>因为他们有一个 audience包含 print 的属性.

要排除标题(将上下文缩减为 taskbody),请使用:

//task/taskbody//*[not(descendant::*[@audience='print']) and not(ancestor-or-self::*[@audience='print'])] 

关于xml - XPath 查询以选择没有特定属性的特定值的任何后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com