Замена локального имени XML через XSLT - PullRequest
0 голосов
/ 05 августа 2011

Я хочу преобразовать следующий код

================

<spirit:parameter>
    <spirit:name>P3</spirit:name>
          <spirit:test_value>8</spirit:test_value>
        </spirit:parameter>
</spirit:parameters>

================

в

================

<spirit:parameter>
    <spirit:name>P3</spirit:name>
          <spirit:glue_value>8</spirit:glue_value>
        </spirit:parameter>
</spirit:parameters>

================

Я хочу сделать это через XSLT.Пожалуйста, помогите

1 Ответ

0 голосов
/ 05 августа 2011

Ваш пример ввода был не совсем корректным, поэтому слегка изменил его и добавил пространство имен:

<?xml version="1.0" encoding="UTF-8"?>
<spirit:parameters xmlns:spirit="http://example.com/namespace/spirit">
    <spirit:parameter>
        <spirit:name>P3</spirit:name>
        <spirit:test_value>8</spirit:test_value>
    </spirit:parameter>
</spirit:parameters>

По сути, вы хотите скопировать все узлы, кроме 'spirit: test_value', который необходимо переименовать:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:spirit="http://example.com/namespace/spirit">
    <xsl:output omit-xml-declaration='yes'/>

    <xsl:template match="spirit:parameters|spirit:parameter|spirit:name">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="spirit:test_value">
        <spirit:glue_value>
            <xsl:copy-of select="@*"/>
            <xsl:apply-templates/>
        </spirit:glue_value>
    </xsl:template>
</xsl:stylesheet>

Разделы '<xsl:copy-of select="@*"/>' являются необязательными, они вам понадобятся, если вы хотите скопировать любые атрибуты из исходного XML.

...