【问题标题】:xQuery get value of attribute with multiplesxQuery获取具有倍数的属性值
【发布时间】:2016-05-26 03:23:59
【问题描述】:

我正在尝试使用 xQuery 获取属性的确切文本。我发现的问题是我有多个具有相同名称的元素,它们在文本中有一个带有冒号的属性。

例子

    <body>
      <tag xlink:href="1.jpg" position="float" orientation="portrait"/>
      <tag xlink:href="2.jpg" position="float" orientation="portrait"/>
      <tag xlink:href="3.jpg" position="float" orientation="portrait"/>
      <tag xlink:href="4.jpg" position="float" orientation="portrait"/>
    </body>

我使用的一些例子如下

for $graphic in $body//tag
  return element tag { ($graphic//@*[name()="xlink:href"]) },

element tag { $body//graphic/@*[name()="xlink:href"] }

我当前的两个示例都给出了一些输出,但不是预期的。我正在寻找的预期输出是......

1.jpg
2.jpg
3.jpg
4.jpg

有什么想法吗?

【问题讨论】:

    标签: xquery


    【解决方案1】:

    对我来说这是可行的:

    xquery version "3.0";
    
    declare namespace xlink = "http://xlink.im";
    
    let $body := <body>
          <tag xlink:href="1.jpg" position="float" orientation="portrait"/>
          <tag xlink:href="2.jpg" position="float" orientation="portrait"/>
          <tag xlink:href="3.jpg" position="float" orientation="portrait"/>
          <tag xlink:href="4.jpg" position="float" orientation="portrait"/>
        </body>
    for $graphic in $body//tag
      return $graphic/@xlink:href
    

    只需尝试返回$graphic/@xlink:href

    【讨论】:

      【解决方案2】:

      您可以使用简单的 XPath 表达式来返回属性:

      $body//tag/@*[name()="xlink:href"]/data()
      

      鉴于有问题的 HTML sn-p,上述 XPath/XQuery 的输出与您正在寻找的完全一样,请参阅 demo

      或者,如果您想以这种格式获取单个字符串值:

      string-join($body//tag/@*[name()="xlink:href"], "&#10;")
      

      【讨论】:

      • 谢谢这是完美的。
      【解决方案3】:

      xquery 元素或 QName 中冒号之前的部分是命名空间。

      在您的示例中,xlink 将是名称空间。在示例 XML 中,xlink 应该在 XML 中定义。很多时候它在根节点中定义。

      如果您需要 xpath 到具有命名空间的元素,请确保在您的 xquery 中定义命名空间并将其放入 xpath

      body/tag/@xlink:href
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 2021-07-31
        • 1970-01-01
        • 2013-11-15
        • 2022-06-20
        相关资源
        最近更新 更多