我有这个XML文件,我想找到这些查询:
这是XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE inventory SYSTEM "books.dtd">
<inventory>
<book num="b1">
<title>Snow Crash</title>
<author>Neal Stephenson</author>
<publisher>Spectra</publisher>
<price>14.95</price>
<chapter>
<title>Snow Crash - Chapter A</title>
<paragraph>
This is the <emph>first</emph> paragraph.
<image file="firstParagraphImage.gif"/>
afetr image...
</paragraph>
<paragraph>
This is the <emph>second</emph> paragraph.
<image file="secondParagraphImage.gif"/>
afetr image...
</paragraph>
</chapter>
<chapter>
<title>Snow Crash - Chapter B</title>
<section>
<title>Chapter B - section 1</title>
<paragraph>
This is the <emph>first</emph> paragraph of section 1 in chapter B.
<image file="Chapter_B_firstParagraphImage.gif"/>
afetr image...
</paragraph>
<paragraph>
This is the <emph>second</emph> paragraph of section 1 in chapter B.
<image file="Chapter_B_secondParagraphImage.gif"/>
afetr image...
</paragraph>
</section>
</chapter>
<chapter>
<title>Chapter C</title>
<paragraph>
This chapter has no images and only one paragraph
</paragraph>
</chapter>
</book>
<book num="b2">
<title>Burning Tower</title>
<author>Larry Niven</author>
<author>Jerry Pournelle</author>
<publisher>Pocket</publisher>
<price>5.99</price>
<chapter>
<title>Burning Tower - Chapter A</title>
</chapter>
<chapter>
<title>Burning Tower - Chapter B</title>
<paragraph>
This is the <emph>second</emph> paragraph of chapter B in the 2nd book.
<image file="Burning_Tower_Chapter_B_secondParagraphImage.gif"/>
afetr image...
</paragraph>
</chapter>
</book>
<book num="b3">
<title>Zodiac</title>
<author>Neal Stephenson</author>
<publisher>Spectra</publisher>
<price>7.50</price>
<chapter>
<title>Zodiac - Chapter A</title>
</chapter>
</book>
<!-- more books... -->
</inventory>
以下是我的答案:
1. /inventory/book[count(image)=1]/title
2. /inventory/book[count(image)>=1/title
3. /inventory/book[author=”Larry Niven”][count(author)>1]/author
但是当我使用Java XPath代码测试这些答案时,它不起作用。
错误在哪里?谢谢
答案 0 :(得分:2)
您的前两个问题与文档中image
的位置有关 - 需要从当前节点搜索并搜索所有子项(不仅仅是直接子项):
/inventory/book[count(.//image) = 1]/title
/inventory/book[count(.//image) >= 1]/title
您的上一个引号有问题(需要使用单引号),还会重复Larry Niven
。这是修复:
/inventory/book[author='Larry Niven'][count(author) > 1]/author[. != 'Larry Niven']
请注意,您可以改为使用and
:
/inventory/book[author='Larry Niven' and count(author) > 1]/author[. != 'Larry Niven']