2016-05-25 10 views
0

xQueryを使用して属性の正確なテキストを取得しようとしています。私が探している問題は、テキストにコロンのある属性を持つ複数の要素が同じ名前であることです。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 

アイデアはありますか?

答えて

1

あなたが属性を返すために、単純なXPath式を使用することができます。

問題のHTMLスニペットを考える
$body//tag/@*[name()="xlink:href"]/data() 

、上記のXPath/XQueryの出力は、あなたが探しているものを、demo

を見るとまったく同じです

また、あなたは、このような形式で単一の文字列値を取得することを意味している場合:

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

ありがとう、これは完璧です。 – Key

0

xquery要素またはQName内のコロンの前の部分が名前空間です。あなたの例のXLINKで

は、名前空間になります。 XMLの例では、xlinkをXMLで定義する必要があります。ルートノードで何度も定義されています。

名前空間があなたのXQueryで定義して、ちょうど私のXPathで

body/tag/@xlink:href 
2

をそれを置くこの作品であることを確認した名前空間を持つ要素へのXPathする必要がある場合:

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を返そうとしてください。

関連する問題