Xml 如何使用XQuery fn:idref()函数?

Xml 如何使用XQuery fn:idref()函数?,xml,xquery,saxon,idref,Xml,Xquery,Saxon,Idref,我无法让XQuery函数fn:idref()返回任何内容 我有这个XML文档doc.XML <doc> <foo idref="xyz"/> <bar xml:id="xyz"/> </doc> 但结果总是空的。我猜属性idref=“xyz”需要声明为typeidref,但这可以在没有模式的情况下实现吗 我使用的是Saxon XQuery 1.0处理器。是的,idref()函数只检索标记为IDREFs的属性,这仅在模式验证的结果下发生 有

我无法让XQuery函数
fn:idref()
返回任何内容

我有这个XML文档doc.XML

<doc>
  <foo idref="xyz"/>
  <bar xml:id="xyz"/>
</doc>
但结果总是空的。我猜属性
idref=“xyz”
需要声明为type
idref
,但这可以在没有模式的情况下实现吗

我使用的是Saxon XQuery 1.0处理器。

是的,idref()函数只检索标记为IDREFs的属性,这仅在模式验证的结果下发生

有一个不推荐使用的旧设置config.setRetainDTDAttributeTypes(),允许它作为DTD验证的结果工作,但我不会使用它

您始终可以执行
doc(“doc.xml”)/*[@idref=“xyz”]
。这将导致在Saxon HE和Saxon PE中进行串行搜索,但将使用Saxon EE中的索引。我通常建议使用
idref()
函数


当然,在XSLT中,您可以使用键。

太好了,谢谢。我也有一个类似的问题,但有一个idrefs属性。我要问一个新问题。
let $d := doc("doc.xml")
return $d/idref("xyz")