Devuelve la estructura XML hasta el nivel n
Frecuentes
Visto 117 veces
2
¿Existe una forma sencilla, posiblemente con herramientas de línea de comandos de código abierto en Linux, para eliminar todos los niveles más allá de un umbral determinado de un documento XML determinado, independientemente de la estructura?
Entrada:
<a att="1">
<b/>
<c bat="2">
<d/>
</c>
</a>
Salida, nivel=1:
<a att="1"/>
Salida, nivel=2:
<a att="1">
<b/>
<c bat="2"/>
</a>
Probé XPath pero no pude restringir el nivel.
3 Respuestas
3
Muy simple en 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>
Respondido el 12 de junio de 12 a las 17:06
3
En XQuery es casi lo mismo que en XSLT:
copy $output := $input
modify delete nodes $output//node()[count(ancestor::*) eq $level]
return $output
Respondido el 12 de junio de 12 a las 18:06
2
O sin XQuery Update, deconstruya y vuelva a armar el árbol hasta alcanzar el nivel máximo:
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)
Respondido el 12 de junio de 12 a las 18:06
Gracias. Funciona para mí después de agregar un
<xsl:stylesheet ...>
declaración. - krlmlr