将XML结构返回到第n级

有没有一种简单的方法,可能使用Linux中的开源命令行工具,从给定的XML文档中剥离给定阈值之外的所有级别,而不pipe结构如何?

input:

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

输出,等级= 1:

 <a att="1"/> 

输出,等级= 2:

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

我已经尝试过XPath,但无法限制级别。

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> 

在XQuery中,它与XSLT中的几乎相同:

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

尝试与佐巴

或者没有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)