【问题标题】:How to use the XQuery fn:idref() function?如何使用 XQuery fn:idref() 函数?
【发布时间】:2011-06-21 23:10:21
【问题描述】:

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

【问题讨论】:

    标签: xml xquery saxon idref


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 太好了,谢谢。我也有类似的问题,但有一个 idrefs 属性。我会问一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多