当使用 java 在 xsl 样式表的帮助下替换 xml 元素时,未被替换

when replace the xml elements with the help of xsl stylesheet using java,not getting replaced

如何用xsl替换子标签名。 下面是我的 xml.

结构
  <Checkpax xmlns="http://xml.api.com/test">
    <customerLevel>
        <customerDetails>
            <paxDetails>
                <surname>MUKHERJEE</surname>
                <type>A</type>
                <gender>M</gender>
            </paxDetails>
            <otherPaxDetails>
                <givenName>JOY</givenName>
                <title>MR</title>
                <age>11</age>
            </otherPaxDetails>
            <otherPaxDetails>
                <title>MR</title>
            </otherPaxDetails>
        </customerDetails>
        <staffDetails>
            <staffInfo/>
            <staffCategoryInfo>
                <attributeDetails>
                    <attributeType>NA</attributeType>
                </attributeDetails>
            </staffCategoryInfo>
        </staffDetails>
        <productLevel>
            <legLevel>
                <legLevelIndicator>
                    <statusDetails>
                        <indicator>abc</indicator>
                        <action>1</action>
                    </statusDetails>
                </legLevelIndicator>
            </legLevel>
        </productLevel>
        <CustomerLevel>
            <legLevel>
                <legLevelIndicator>
                    <statusDetails>
                        <indicator>cde</indicator>
                        <action>1</action>
                    </statusDetails>
                </legLevelIndicator>
            </legLevel>
        </CustomerLevel>
    </customerLevel>
</Checkpax>

下面是我的XSL文件

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" omit-xml-declaration="yes"/>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>
    <xsl:template match="customerLevel/productLevel/legLevel/legLevelIndicator/statusDetails">
        <statusInformation>
            <xsl:apply-templates select="@*|node()" />
        </statusInformation>
    </xsl:template>
</xsl:stylesheet>

此处的 statusDetails 名称应更改为 ProductLevel/LeglevelIndicator 内的 staffInformation。请给我建议。

以下为预期结果

<Checkpax xmlns="http://xml.api.com/test">
        <customerLevel>
            <customerDetails>
                <paxDetails>
                    <surname>MUKHERJEE</surname>
                    <type>A</type>
                    <gender>M</gender>
                </paxDetails>
                <otherPaxDetails>
                    <givenName>JOY</givenName>
                    <title>MR</title>
                    <age>11</age>
                </otherPaxDetails>
                <otherPaxDetails>
                    <title>MR</title>
                </otherPaxDetails>
            </customerDetails>
            <staffDetails>
                <staffInfo/>
                <staffCategoryInfo>
                    <attributeDetails>
                        <attributeType>NA</attributeType>
                    </attributeDetails>
                </staffCategoryInfo>
            </staffDetails>
            <productLevel>
                <legLevel>
                    <legLevelIndicator>
                        <statusInformation>
                            <indicator>abc</indicator>
                            <action>1</action>
                        </statusInformation>
                    </legLevelIndicator>
                </legLevel>
            </productLevel>
            <CustomerLevel>
                <legLevel>
                    <legLevelIndicator>
                        <statusDetails>
                            <indicator>cde</indicator>
                            <action>1</action>
                        </statusDetails>
                    </legLevelIndicator>
                </legLevel>
            </CustomerLevel>
        </customerLevel>
    </Checkpax>

the statusDetails name should be changed as staffInformation inside the ProductLevel/LeglevelIndicator

这样试试:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://xml.api.com/test"
exclude-result-prefixes="ns0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="ns0:productLevel/ns0:legLevel/ns0:legLevelIndicator/ns0:statusDetails">
    <staffInformation xmlns="http://xml.api.com/test">
        <xsl:apply-templates/>
    </staffInformation>
</xsl:template>

</xsl:stylesheet>