xQuery获取具有倍数的属性值

时间:2016-05-25 11:49:05

标签: xquery

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

实施例

-keepattributes Signature
-keepclassmembers class com.yourapp.**{
    *;
}

我使用的一些例子如下

    <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"] }

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

对我而言,这有效:

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

答案 1 :(得分:1)

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

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

鉴于有问题的HTML代码段,上述XPath / XQuery的输出完全符合您的要求,请参阅 demo

或者,如果您的意思是以这种格式获得单个字符串值:

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

答案 2 :(得分:0)

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

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

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

body/tag/@xlink:href