如何在 xsl 的帮助下删除 xml 元素?

how to remove the xml elements with the help of the xsl?

如何借助xsl删除xml中的子元素、节点和父元素

这是我的 xml 代码。

<?xml version="1.0" encoding="UTF-8"?>
<Checkpax xmlns="http://xml.api.com/test">
    <customerLevel>
        <surname>MUKHERJEE</surname>
        <type>A</type>
        <gender>M</gender>
        <otherPaxDetails>
            <givenName>JOY</givenName>
            <title>MR</title>
            <age>11</age>
        </otherPaxDetails>
        <otherPaxDetails>
            <title>MR</title>
        </otherPaxDetails>
        <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>

预期输出xml:

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

我从头到尾尝试过的 XSL :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://xml.api.com/test"
    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>

  <!-- Apply all child nodes; don't copy the element itself -->
  <xsl:template match="ns0:customerLevel| ns0:customerDetails| ns0:paxDetails">
    <xsl:apply-templates/>
  </xsl:template>

</xsl:stylesheet>

请建议 xsl 样式表以获得预期的效果 xml output.i 不知道如何删除 element.also 这对许多正在寻找使用 xsl.

在 xml 中删除元素

AFAICT,您的第二个模板需要是:

<xsl:template match="ns0:productLevel | ns0:legLevel">
    <xsl:apply-templates/>
</xsl:template>

这将删除 productLevellegLevel 包装器,并将 legLevelIndicator 提升为 staffDetails 的同级。


give me some suggestions how to remove the <age>11</age> tag under the otherPaxDetails

添加一个模板匹配age:

<xsl:template match="ns0:age"/>

如果您可能有其他同名元素,请缩小匹配模式:

<xsl:template match="ns0:otherPaxDetails/ns0:age"/>