gpt4 book ai didi

xml - 用于解析属性中所有 IDREFS 的 XPath 查询(可能包含许多 ID)

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

我需要提出一个查询,给出未售出商品类型的产品 意思是如果商品属于服装类型,并且没有服装商品出现在列表中交易,我需要显示它。

这是我的 XML 文件(为 super 加拿大风格道歉):

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE store [

<!ELEMENT store (product*, transaction*)>
<!ATTLIST store name CDATA #REQUIRED >

<!ELEMENT product EMPTY>
<!ATTLIST product
name ID #REQUIRED
type CDATA #REQUIRED
price CDATA #REQUIRED
>

<!ELEMENT transaction EMPTY>
<!ATTLIST transaction
products IDREFS #REQUIRED
sumPrice CDATA #REQUIRED
>

]>
<store name="Gordons">
<product name="beaverCoat" type="clothing" price="100"/>
<product name="hockeyStick" type="equipment" price="30"/>
<product name="hockeyPuck" type="equipment" price="5"/>
<product name="icePick" type="equipment" price="40"/>
<product name="mooseMeat" type="food" price="350"/>
<product name="salmon" type="food" price="15"/>
<transaction products="hockeyPuck hockeyStick" sumPrice="35"/>
<transaction products="hockeyStick mooseMeat" sumPrice="380"/>
<transaction products="salmon mooseMeat" sumPrice="365"/>
<transaction products="hockeyStick hockeyStick hockeyStick" sumPrice="30"/>
</store>

期望的输出

<product name="beaverCoat" type="clothing"/>因为它是来自某个类别(服装)的产品,但没有人从中购买过任何东西。即没有交易包括服装。

我的尝试我已经尝试过一些查询,但我就是做对了。这是我得到的最接近的:

//product[@type != //transactions/@products/@type]

这似乎应该可行 - 找到所有 type 的产品不等于 type 中的任何一个在所有 transactions但是我遇到了很多错误。

如果有人能提供解决方案并提供一些解释,我将不胜感激。

最佳答案

您可以使用 id()函数获取所有已售出的项目的节点集,在 transaction 元素的 products 属性的节点集上使用它:

id(//transaction/@products)

并且您可以轻松扩展它以获取已售出商品的类型:

id(//transaction/@products)/@type

你想要的是 type not 在此集合中的所有产品,由下式给出:

//product[not(@type = id(//transaction/@products)/@type)] 

在您的示例 XML 上使用它仅选择 beaverCoat 产品节点。

关于xml - 用于解析属性中所有 IDREFS 的 XPath 查询(可能包含许多 ID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21150895/

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