我正在尝试编写一个XPath查询来查找2008年发布的论文作者的位置。我有两个文件,authors.xml
和papers.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>
答案 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 ()
这可能都在一条线上,但请不要这样做。如果允许空格,请将其用于可读性。