Использование XSLT для копирования всех узлов в XML с поддержкой особых случаев
Скажем, у меня есть большой XML файл, который имеет следующую структуру:
<MyXml>
<Data1>
<Node1>1234</Node1>
<Node2>abc<Node2>
<Node3>gfdf</Node3>
...
<Node10000>more text</Node10000>
</Data1>
<Data2>
...
</Data2>
</MyXml>
Я хочу преобразовать этот XML в другой XML, который выглядит точно так же, но имеет определенную строку, объединенную с определенным node, скажем Node766. Я использую XSLT, конечно, и задаюсь вопросом, как я могу сказать, что он копирует все как есть, кроме Node766, где я должен что-то сделать, прежде чем выводить его.
Ответы
Ответ 1
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--Identity template,
provides default behavior that copies all content into the output -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--More specific template for Node766 that provides custom behavior -->
<xsl:template match="Node766">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<!--Do something special for Node766, like add a certain string-->
<xsl:text> add some text </xsl:text>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Ответ 2
Начните с преобразования и включите соответствие шаблона для вашего исключения.