如何在 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>
这将删除 productLevel
和 legLevel
包装器,并将 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"/>
如何借助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>
这将删除 productLevel
和 legLevel
包装器,并将 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"/>