这是我的XML的根源(还有更多内容,但这是基础):
<?xml version="1.0" encoding="UTF-8"?><section xmlns="http://quark.com/smartcontent/2.0" id="_63f6a0c9-bac8-4a15-854c-03d80bd46b64" type="clientFactsheet">
这是我的XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:deltaxml="http://www.deltaxml.com/ns/well-formed-delta-v1" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="*|@*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="section[@id]">
<xsl:copy>
<xsl:attribute name="deltaxml:key" select="@id"/>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
这是输出XML根目录:
<?xml version="1.0" encoding="UTF-8"?><section xmlns="http://quark.com/smartcontent/2.0" id="_63f6a0c9-bac8-4a15-854c-03d80bd46b64" type="clientFactsheet">
如果我从输入XML中删除默认命名空间,这就是我得到的结果(除了我需要保留默认命名空间之外,这是期望的结果):
<?xml version="1.0" encoding="UTF-8"?><section xmlns:deltaxml="http://www.deltaxml.com/ns/well-formed-delta-v1" deltaxml:key="_63f6a0c9-bac8-4a15-854c-03d80bd46b64" id="_63f6a0c9-bac8-4a15-854c-03d80bd46b64" type="clientFactsheet">
基本上,我需要能够添加带有“id”值的“deltaxml:key”属性,所以我需要添加命名空间“deltaxml”,但我还需要保留默认命名空间(哪个可以从一个文档更改为我无法控制的文档...所以我不能只复制它。我怎么能做到这一点?
答案 0 :(得分:1)
我还需要保留默认命名空间(可以从中更改) 文件到文件
这是一种罕见的情况,其中传入XML的命名空间事先是未知的。这使您处于不利地位,因为尝试仅通过其本地名称匹配/选择节点可能很容易导致匹配/选择具有相同本地名称但位于不同名称空间中的其他节点。
如果你无法避免,请尝试以下几点:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:deltaxml="http://www.deltaxml.com/ns/well-formed-delta-v1">
<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>
<xsl:template match="*:section[@id]">
<xsl:copy>
<xsl:attribute name="deltaxml:key" select="@id"/>
<xsl:apply-templates select="@*, node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
应用于以下输入示例:
<强> XML 强>
<section xmlns="http://quark.com/smartcontent/2.0"
id="_63f6a0c9-bac8-4a15-854c-03d80bd46b64"
type="clientFactsheet">
<!-- content -->
</section>
结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://quark.com/smartcontent/2.0"
xmlns:deltaxml="http://www.deltaxml.com/ns/well-formed-delta-v1"
deltaxml:key="_63f6a0c9-bac8-4a15-854c-03d80bd46b64"
id="_63f6a0c9-bac8-4a15-854c-03d80bd46b64"
type="clientFactsheet"><!-- content --></section>