我想使用xslt
删除两个根标签和一个命名空间<?xml version="1.0" encoding="UTF-8"?>
<sxi:Messages xmlns:sxi="http://sap.com/xi/XI/SplitAndMerge">
<sxi:Message1>
<ZDetails>
.
.
</ZDetails>
</sxi:Message1>
</sxi:Messages>
我希望它是
<?xml version="1.0" encoding="UTF-8"?>
<ZDetails>
..
.
</ZDetails>
标签之间的数据n不应该被更改。我尝试通过搜索加入一些xslt代码但是它们正在删除ZDetails之间的一些属性。所以张贴一个新的。任何人都可以帮助我了解各自的xslt代码。
答案 0 :(得分:1)
这应该这样做:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sxi="http://sap.com/xi/XI/SplitAndMerge">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="sxi:Messages">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="sxi:Message1">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
第一个模板会复制所有内容,其他两个模板会跳过sxi:Messages
和xsi:Message1
元素 - 仍在复制其内容。
如果要删除http://sap.com/xi/XI/SplitAndMerge
命名空间中的所有元素:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sxi="http://sap.com/xi/XI/SplitAndMerge">
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="sxi:*">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
这是一种简单的方法,保证不会在<ZDetails>
元素下更改任何内容:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:copy-of select="/*/*/ZDetails" />
</xsl:template>
</xsl:stylesheet>
模板只复制最外层元素的孙<ZDetails>
元素及其整个子树,并忽略其他任何内容。