这里是我的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“,但我也需要保留默认的命名空间(它可以从一个文档更改到另一个文档,我将无法控制.所以我不能把它复制过来)。我怎样才能做到这一点?
发布于 2016-07-28 21:07:35
我还需要保留默认的命名空间(它可以在文档和文档之间进行更改)。
这是一种罕见的情况,在这种情况下,传入XML的命名空间是未知的。这使您处于不利地位,因为尝试按照节点的本地名称匹配/选择节点只会很容易地匹配/选择具有相同本地名称的其他节点,但会产生不同的命名空间/s。
如果您无法避免这种情况,请尝试以下几种方法:
XSLT2.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>https://stackoverflow.com/questions/38646414
复制相似问题