XPath查询 - 布尔条件

时间:2012-05-21 06:01:45

标签: xml xpath xpath-2.0

我有这个XML文件,我想找到这些查询:

  1. 包含图片的所有图书
  2. 所有包含多张图片的图书
  3. 所有与“Larry Niven”一起写过书的作者
  4. 这是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代码测试这些答案时,它不起作用。

    错误在哪里?谢谢

1 个答案:

答案 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']