我正在使用XSLT变换产生XML输出。我添加了一个bizdata和Pyld节点,以包围标题和有效载荷数据。我得到了一个不必要的名称空间属性,该属性出现在bizdata和pyld上,我不确定它来自哪里。
我已经从文档标签中删除了所有数据,因为这一切都按预期填充。
XSLT如下:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="http://exslt.org/common">
<xsl:strip-space elements="*" />
<xsl:output indent="yes" />
<xsl:template match="/Root/node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:variable name="vrtfPass1Result">
<xsl:apply-templates/>
</xsl:variable>
<xsl:apply-templates mode="mPass2"
select="ext:node-set($vrtfPass1Result)/*"/>
</xsl:template>
<xsl:template match="/Root">
<BizData>
<Hdr>
<AppHdr>
<CharSet>String</CharSet>
<Fr>
<OrgId>
<Id>
<OrgId>
<Othr>
<Id>4ABC</Id>
</Othr>
</OrgId>
</Id>
</OrgId>
</Fr>
<To>
<OrgId>
<Id>
<OrgId>
<Othr>
<Id>DRRL</Id>
</Othr>
</OrgId>
</Id>
</OrgId>
</To>
<BizMsgIdr>EUSF</BizMsgIdr>
<MsgDefIdr>a</MsgDefIdr>
<CreDt>2001-12-17T09:30:47Z</CreDt>
</AppHdr>
</Hdr>
</BizData>
<Pyld>
<Document>
.....
</Document>
</Pyld>
</xsl:template>
<xsl:template match="@*|node()" mode="mPass2">
<xsl:if test="normalize-space(.) != '' or ./@* != ''">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="node()|@*" mode="mPass2"/>
</xsl:copy>
</xsl:if>
</xsl:template>
<xsl:template match=
"*[not(@*|*|comment()|processing-instruction())
and normalize-space()=''
]" mode="mPass2"/>
</xsl:stylesheet>
我得到了:
<?xml version="1.0" encoding="utf-8"?>
<BizData xmlns:ext="http://exslt.org/common"> <<<WHY IS THERE THE ATTRIBUTE ADDED HERE
<Hdr>
<AppHdr>
<CharSet>String</CharSet>
<Fr>
<OrgId>
<Id>
<OrgId>
<Othr>
<Id>4ABC</Id>
</Othr>
</OrgId>
</Id>
</OrgId>
</Fr>
<To>
<OrgId>
<Id>
<OrgId>
<Othr>
<Id>DRRL</Id>
</Othr>
</OrgId>
</Id>
</OrgId>
</To>
<BizMsgIdr>EUSF</BizMsgIdr>
<MsgDefIdr>a</MsgDefIdr>
<CreDt>2001-12-17T09:30:47Z</CreDt>
</AppHdr>
</Hdr>
</BizData>
<Pyld xmlns:ext="http://exslt.org/common"> <<<WHY IS THERE THE ATTRIBUTE ADDED HERE
<Document>
.....
</Document>
</Pyld>
不确定为什么属性-xmlns:ext =" http://exslt.org/common" - 在这些元素上填充...
预先感谢Saul
将属性 exclude-result-prefixes="ext"
添加到XSLT的根元素中,以避免这种情况。
正如您在XSLT代码中声明的xmlns:ext="http://exslt.org/common"
一样,名称空间声明范围范围为您的任何结果元素(例如BizData
元素及其后代(,因此这就是为什么XSLT处理器为您的结果文档输出它(https:/https://www.w3.org/tr/xslt-10/#literal-result-element(。您只需要从输入中选择节点或选择扩展功能的任何名称空间,可以在exclude-result-prefixes
中声明以避免在结果树序列化期间使用它。