为什么我的查询报告“路径表达式中的步骤必须产生节点​​”?

时间:2015-01-22 17:51:46

标签: xquery basex

我对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   找到。“

谁能告诉我什么是错的?我期待的结果是包含文档中所有标题的列表。

2 个答案:

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

为了便于阅读并保持代码行短,我剪切了最后一个轴的步骤;只需再次添加它们就可以了。