2

構造に関係なく、特定のXMLドキュメントから特定のしきい値を超えるすべてのレベルを削除する簡単な方法はありますか?おそらくLinuxのオープンソースコマンドラインツールを使用しますか?

入力:

<a att="1">
   <b/>
   <c bat="2">
      <d/>
   </c>
</a>

出力、レベル= 1:

<a att="1"/>

出力、レベル= 2:

<a att="1">
   <b/>
   <c bat="2"/>
</a>

XPathを試しましたが、レベルを制限できませんでした。

4

3 に答える 3

3

XSLTでは非常に単純です:

<xsl:template match="*">
  <xsl:if test="count(ancestor::*) &lt;= $level">
    <xsl:copy>
      <xsl:copy-of select="@*"/>
      <xsl:apply-templates/>
    </xsl:copy>
  </xsl:if>
</xsl:template>
于 2012-06-12T16:18:03.227 に答える
3

XQueryでは、XSLTとほぼ同じです。

copy $output := $input
modify delete nodes $output//node()[count(ancestor::*) eq $level]
return $output

zorbaで試してみてください

于 2012-06-12T17:44:52.593 に答える
2

または、XQuery Updateを使用せずに、最大レベルに達するまでツリーを分解して再度まとめます。

declare function local:limit-level($element as element(), $level as xs:integer) {  
    if ($level gt 0)
    then
        element {node-name($element)} {
            $element/@*,
      (
        for $child in $element/node()  
        return local:limit-level($child, $level - 1)
      )
    }
  else ()
};

local:limit-level(/*, 2)
于 2012-06-12T17:57:47.860 に答える