Elaborazione solo dei nodi selezionati
Domanda
Un problema per principianti XSLT: ho bisogno di sostituire un valore di testo nel file XML. Tutti gli altri nodi devono essere lasciati invariati. Ecco il mio file di input (in.xml):
<?xml version="1.0" encoding="UTF-8"?>
<root>
<level1 attr1="val1">
<level2>in</level2>
</level1>
</root>
Ecco la mia trasformazione XSLT (subst.xsl):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="//node()">
<xsl:copy>
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="/root/level1/level2/text()">out</xsl:template>
</xsl:stylesheet>
Lo eseguo con il seguente script Ant (build.xml):
<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="test" basedir=".">
<target name="test">
<xslt style="subst.xsl" in="in.xml" out="out.xml" />
</target>
</project>
Ed ecco cosa ottengo (out.xml):
<?xml version="1.0" encoding="UTF-8"?><root>
<level1>
<level2>out</level2>
</level1>
</root>
Attributo " attr1 " di "livello1" manca.
Sarei molto grato se qualcuno
- dimmi cosa c'è che non va in subst.xsl
o
- dammi un'idea di come forzare xslt-processor basta copiare nodi non corrispondenti nel file di output e farlo manualmente (che nel mio caso è soggetto a errori).
Soluzione
Alla tua trasformazione dell'identità mancano gli attributi (ovviamente). Usa questo invece:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Quindi, aggiungi il tuo ultimo modello.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow