我有一个XML文件,我试图提取元素书籍和期刊的标题,其中ID和IDREF的匹配产品在评论中没有价值。
所以我看到的XML文件看起来像这样:
<bookshop>
<product ID="185.3.16">
<price currency="AU$">56.85</price>
<comments>Best sell</comments>
</product>
<product ID="163.24.12">
<price currency="NZ$">28.6</price>
<comments />
</product>
<product ID="332.17.25">
<price currency="US$">19.95</price>
<comments></comments>
</product>
<book IDREF="163.24.12">
<title>Core Java</title>
</book>
<book IDREF="185.3.16">
<title>C++ Development</title>
</book>
<journal IDREF="332.17.25">
<title>Mathematics and Computing</title>
</journal>
</bookshop>
我想要实现的输出是:
<title>Core Java</title>
<title>Mathematics and Computing</title>
因为C ++开发的IDREF书与其子评论没有价值的产品的ID相匹配。
我尝试使用xquery创建一个脚本,方法是尝试查找具有不同ID属性的所有元素产品,其中子注释也为空,但我在尝试查找没有注释的产品时遇到问题,然后将这些结果翻译成我可以返回的内容。 (在我能解决产品问题之前,我无法给予正确的回报,所以我无法对此产生很大的回旋余地。)但这是我迄今为止所尝试过的:
for $id in distinct-values(//product/@ID)
where count(//product/comments/text()) > 0
return ...?
非常感谢任何帮助。
提前致谢!
答案 0 :(得分:0)
&#34;我正在尝试提取元素书籍和期刊的标题,其中ID和IDREF的匹配产品在评论中没有价值&#34;
这是一个可能返回您所述问题的XPath:
/bookshop/*[@IDREF = /bookshop/product[normalize-space(comments) = '']/@ID]/title
如果您只想选择book
或journal
,只需在[self::book | self::journal]
之后添加谓词:/*
。
<强> xpathtester demo
强>
输出
<title>Core Java</title>
<title>Mathematics and Computing</title>
更新:
目前还不清楚限制(您可以使用哪种XPath表达式)。假设您不允许使用XPath谓词([]
),可以将其替换为where
子句,如下所示:
declare variable emptyProductIDs := /bookshop/product[not(comments/text())]/@ID
for $element in /bookshop/*
where $element/@IDREF = $emptyProductIDs
return $element/title