1

私は次のXMLを持っています:

<RULES>
    <TRAP name="trap1" oid=".1.2.3">
      <VAR_LIST>
        <VAR name="var1" value=".1.2.3.1"/>
        <VAR name="var2" value=".1.2.3.2"/>
      </VAR_LIST>
    </TRAP>
    <TRAP name="trap2" oid=".1.2.4">
        ...
    </TRAP>
    ...
</RULES>

フラット化された要約を生成したいので、次のように繰り返します。

for $trap in /RULES/TRAP
    for $var in $rule/VAR_LIST/VAR
       return (opening-tag-declaration($trap), opening-tag-declaration($var), "&#10;")

次の出力を取得したいのですが、タグの開始宣言のみを抽出する方法がわかりません...

<TRAP name="trap1" oid=".1.2.3> <VAR name="var1" value=".1.2.3.1"/>
<TRAP name="trap1" oid=".1.2.3> <VAR name="var2" value=".1.2.3.2"/>
<TRAP name="trap2" oid=".1.2.4> ...
...
4

2 に答える 2

2

定義する1つの方法は次のとおりです( FunctXライブラリのこの関数opening-tag-declarationから採用):

declare namespace example = "http://example.com";
declare function example:opening-tag-declaration 
    ( $elements as element()* ) as element()* {

    for $element in $elements
        return element
            {node-name($element)}
            {$element/@* }
};

結果の要素には要素名とその属性が含まれますが、子ノードは含まれません。w3schoolsのbooks.xmlサンプルファイルを使用したデモ。

于 2013-03-08T15:01:59.423 に答える
0

これは、 mgibsonbrが答える前のこの問題に対する私のカスタムアプローチです。

declare function local:tag($node as node()) as xs:string {
    concat(substring-before(fn:serialize($node), ">"), ">")
};
于 2013-03-09T13:07:58.283 に答える