有没有一种简单的方法,可能使用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::*) <= $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)