xml - 使用 XSLT 从 XML 中删除标签
问题描述
我有一个 XML,我想在其中删除一些标签并需要将元素保留在下面是示例。示例 XML:
<aggRes>
<services>
<serviceIdentifier>vStatus</serviceIdentifier>
<body>
<vStatusResponse>
<Access>Y</Access>
</vStatusResponse>
</body>
</services>
<services>
<serviceIdentifier>vRules</serviceIdentifier>
<body>
<vRulesResponse>
<Access>Y</Access>
</vRulesResponse>
</body>
</services>
<services>
<serviceIdentifier>vAppAccess</serviceIdentifier>
<body>
<vAppAccessResponse>
<Access>Y</Access>
</vAppAccessResponse>
</body>
</services>
</aggRes>
所需输出:
<aggRes>
<services>
<serviceIdentifier>vStatus</serviceIdentifier>
<Access>Y</Access>
</services>
<services>
<serviceIdentifier>vRules</serviceIdentifier>
<Access>Y</Access>
</services>
<services>
<serviceIdentifier>vAppAccess</serviceIdentifier>
<Access>Y</Access>
</services>
</aggRes>
我尝试使用这个 XSLT 代码: XSLT 代码:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="body">
<xsl:copy-of select="node()" />
</xsl:template>
<xsl:template match="vStatusResponse">
<xsl:copy-of select="node()" />
</xsl:template>
</xsl:stylesheet>
它没有按预期工作。有人可以帮助如何获得所需的 XML。
解决方案
你想要<xsl:apply-templates>
,不是<xsl:copy-of>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="body|vStatusResponse|vRulesResponse|vAppAccessResponse">
<xsl:apply-templates select="node()" />
</xsl:template>
</xsl:stylesheet>
一个不太明确(因此可能更灵活)的替代方案是
<xsl:template match="body|body/*">
<xsl:apply-templates select="node()" />
</xsl:template>
两种情况下的输出:
<aggRes>
<services>
<serviceIdentifier>vStatus</serviceIdentifier>
<Access>Y</Access>
</services>
<services>
<serviceIdentifier>vRules</serviceIdentifier>
<Access>Y</Access>
</services>
<services>
<serviceIdentifier>vAppAccess</serviceIdentifier>
<Access>Y</Access>
</services>
</aggRes>
推荐阅读
- python - 'numpy.int64' 对象没有属性 'count' - 在 python 中绘制图形时出错
- r - 选择另一列最大的列
- excel - 如何跳过数组VBA中的列
- sql-server - 将数据从 SQL DB 导出为 SAS 传输文件格式 (XPORT)
- javascript - 直方图,如带有强度彩色列和每个 bin 不透明度的图表以显示强度
- java - 如何在 netBeans 中使用自动代码完成?
- jquery - 单击容器外的窗口时关闭模式 - jQuery
- java - 如何创建 Windows 可执行文件?
- java - 在 java 8 中流式传输时拆分逗号分隔的字符串值
- go - 中间件 HTTP 测试在不应该通过时通过