Xpath 从两个相关xml文件中获取节点值
我是Xquery的初学者,我有一个xml代码,我想用另一个文件依赖两个不同的xml文件Xpath 从两个相关xml文件中获取节点值,xpath,xquery,altova,Xpath,Xquery,Altova,我是Xquery的初学者,我有一个xml代码,我想用另一个文件依赖两个不同的xml文件 <library> <Book> <title>Title1</title> <author>Ellizabith</author> </Book> <Book> <title>Title2</title> <author>
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
Book.xml
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
如果你使用
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
let $books := <library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
let $authors := <authorRoot>
<author>
<Name>Rayan</Name>
<Location>Yahoo</Location>
</author>
<author>
<Name>Syan</Name>
<Location>Google</Location>
</author>
<author>
<Name>Sam</Name>
<Location>Bing</Location>
</author>
<author>
<Name>Ellizabith</Name>
<Location>Apple</Location>
</author>
</authorRoot>
return $authors/author[Name = $books/Book[contains(title, 'Title1')]/author]/Location/string()
let$books:=
标题1
伊丽莎白
标题2
山姆
标题3
赖安
让$authors:=
拉扬
雅虎
锡安
谷歌
山姆
宾
伊丽莎白
苹果
返回$authors/author[Name=$books/Book[contains(title,'Title1')]/author]/Location/string()
结果是苹果电脑出现了许多小问题
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
book
后面的斜杠)
元素。改用authoroot/author
$p
,其中包含该FLWOR表达式其余部分的名称,但您希望在第五行中再次使用这本书。最好使用另一个变量名子代或self
-步骤/
(第一行和第二行)。这会降低性能<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
用相应的doc(…)
函数替换$book
和$authors
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
用于$books//library/book中的$book[标题/包含(,'Title1')]
对于$authors//authorRoot/author中的$author
其中$book/author=$author/Name
返回$author/Location/text()
如果您想有一个不同位置的列表,请将不同的值(…)
环绕所有四行
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
没有显式循环的替代方案:
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>
$authors/authorRoot/author[
Name=$books/library/Book[contains(title,'Title1')]/author)
]/位置
第二个解决方案也是有效的XPath 1.0,第一个解决方案需要XPath 3.0或XQuery处理器。您尝试了什么?回答这些问题有很多问题,请查找XQuery和join。如果您有一些代码,但有问题,我们很乐意提供帮助。堆栈溢出不是为了不费吹灰之力就完成作业。@JensErat请查看我的代码。我现在加上去好多了。对于一个完美的问题,还包括您收到的错误消息。阅读有关。谢谢@jens Erat我很少在那里问问题寻求帮助
<library>
<Book>
<title>Title1</title>
<author>Ellizabith</author>
</Book>
<Book>
<title>Title2</title>
<author>Sam</author>
</Book>
<Book>
<title>Title3</title>
<author>Ryan</author>
</Book>
</library>