XSLT从XML中删除特定属性

时间:2018-02-07 11:12:47

标签: xml xslt

我是XSLT的新手,需要帮助从XML中删除属性。除了删除属性

之外,XSLT的输出中没有任何内容可以更改
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 
pain.001.001.03.xsd" 

来自'文件'

<?xml version="1.0" encoding="utf-8"?>
<Document 
xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 
pain.001.001.03.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>

3 个答案:

答案 0 :(得分:0)

我认为您要从根元素中删除命名空间,请尝试使用以下代码删除命名空间属性

{{1}}

答案 1 :(得分:0)

您必须在脚本中包含属性的空模板 省略:

<xsl:template match="@*[name() = 'xsi:schemaLocation']"/>

要复制源而不做任何其他更改,您还需要 身份模板

有关工作示例,请参阅http://xsltransform.net/bEJaofE

修改

上述模板实际上会删除每个 xsi:schemaLocation 属性, 无论其在文件中的位置如何。 如果您只想从根节点中删除此属性, 将模板更改为:

<xsl:template match="/*/@*[name() = 'xsi:schemaLocation']"/>

注意添加/*/以仅匹配根节点的属性,无论其名称如何。

答案 2 :(得分:0)

最好使用xsl:copy-of />,请尝试以下

<xsl:template match="Document/node()">
        <xsl:copy>
            <xsl:apply-templates select="node()"/>
        </xsl:copy>
</xsl:template>`