我对XQuery比较陌生,而且我使用的是以下格式的XML(MODSXML):
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<modsCollection xmlns="http://www.loc.gov/mods/v3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.loc.gov/mods/v3
http://www.loc.gov/standards/mods/v3/mods-3-0.xsd">
<mods ID="ISI:000330282600027" version="3.0">
<titleInfo>
<title>{Minimum Relative Entropy for Quantum Estimation: Feasibility and General
Solution}</title>
</titleInfo>
我正在尝试检索XML文件中包含的所有文章标题。我正在使用的表达式如下:
for $x in collection("ExemploBibtex")/"quantuminformation.xml"/modsCollection/mods/titleInfo/title
return <title>$x/text()</title>
当我尝试在Base上运行此表达式时,出现以下错误:
“[XPTY0019]路径表达式中的步骤必须产生节点; xs:string 找到。“
谁能告诉我什么是错的?我期待的结果是包含文档中所有标题的列表。
答案 0 :(得分:1)
好的,BaseX邮件列表中的问题已解决:D
我需要声明命名空间。所以我现在使用:
declare namespace v3 ="http://www.loc.gov/mods/v3";
for $doc in collection('ExemploBibtex')
where matches(document-uri($doc), 'quantuminformation.xml')
return $doc/v3:modsCollection/v3:mods/v3:titleInfo/v3:title/text()
它有效。
答案 1 :(得分:0)
问题在于:
collection("ExemploBibtex")/"quantuminformation.xml"/modsCollection
这会为quantuminformation.xml
集合中的每个文件/根节点返回一个内容为ExemploBibtex
的字符串,然后尝试对每个字符串执行轴步骤 - 这是不允许的。 / p>
您似乎想要访问集合quantuminformation.xml
中的文档ExemploBibtex
。要打开集合的特定文件,请改用以下语法:
collection("ExemploBibtex/quantuminformation.xml")/modsCollection
为了便于阅读并保持代码行短,我剪切了最后一个轴的步骤;只需再次添加它们就可以了。