问题描述
|
我无法获得XQuery函数
fn:idref()
返回任何内容。
我有这个XML文档doc.xml;
<doc>
<foo idref=\"xyz\"/>
<bar xml:id=\"xyz\"/>
</doc>
还有这个XQuery;
let $d := doc(\"doc.xml\")
return $d/idref(\"xyz\")
但是结果总是空的。我猜测属性idref=\"xyz\"
需要声明为类型idref
,但是可以在没有模式的情况下完成吗?
我正在使用Saxon XQuery 1.0处理器。
解决方法
是的,idref()函数仅检索标记为IDREF的属性,而这仅是模式验证的结果。
有一个已过时的旧式设置config.setRetainDTDAttributeTypes()允许它作为DTD验证的结果而工作,但我不会使用它。
您可以随时做
doc(\"doc.xml\")//*[@idref=\"xyz\"]
。这将导致在Saxon-HE和Saxon-PE中进行串行搜索,但是将使用Saxon-EE中的索引。我通常建议不要使用idref()
函数。
当然,在XSLT中,您可以使用键。