1

我无法让 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 处理器。

4

1 回答 1

3

是的,idref() 函数仅检索标记为 IDREF 的属性,并且仅作为模式验证的结果发生。

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

你总是可以做到doc("doc.xml")//*[@idref="xyz"]的。这将导致在 Saxon-HE 和 Saxon-PE 中进行连续搜索,但将使用 Saxon-EE 中的索引。我通常会推荐这个而不是使用该idref()功能。

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

于 2011-06-22T07:25:24.300 回答