将XPath与多个XML文件一起使用

时间:2015-03-06 22:38:42

标签: xml xpath xquery

我正在尝试编写一个XPath查询来查找2008年发布的论文作者的位置。我有两个文件,authors.xmlpapers.xml。我在下面添加了每个文件的片段来说明每个文件的结构。

如何编写从两个文件中获取信息的XPath查询?我已经编写了一个查询来获取每位作者的位置,但我不知道如何扩展它以将结果限制为2008年发布的作者。

我当前的XPath查询:

doc("authors.xml")//author/location

当前输出(所有作者的位置):

<location>Berkeley</location>
<location>Stanford</location>

期望的输出(仅在2008年发布的作者的位置):

<location>Berkeley</location>

authors.xml

<authorRoot>
    <author>
        <first>John</first>
        <last>Doe</last>
        <location>Berkeley</location>
    </author>
    <author>
        <first>Don</first>
        <last>Knuth</last>
        <location>Stanford</location>
    </author>
</authorRoot>

papers.xml

<paperRoot>
    <paper>
        <journal>
            <author>Don Knuth</author>
            <title>TeX for fun</title>
            <year>1995</year>
        </journal>
    </paper>
    <paper>
        <book>
            <author>Jack Daniels</author>
            <title>The Ballmer Peak</title>
            <year>2004</year>
        </book>
    </paper>
    <paper>
        <journal>
            <author>John Doe</author>
            <title>P equals NP</title>
            <year>2008</year>
        </journal>
    </paper>
</paperRoot>

1 个答案:

答案 0 :(得分:0)

好了,现在我们已经建立了XPath 2.0,我们可以使用for语句。

for $a in doc('authors.xml')/*/author 
    return
    if (doc('papers.xml')
    /*/paper/*[author = concat($a/first, ' ', $a/last)]
    /year[. = '2008'])
    then $a/location else ()

这可能都在一条线上,但请不要这样做。如果允许空格,请将其用于可读性。