我看到了帖子 XSLT:向根元素添加命名空间声明
@StuartLC答案有效。我需要帮助。。。在示例中@schglurps... ¿您将如何将新的命名空间添加到非根节点?
输入的 XML 文档:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="AcquisitionFolder">
<Directory Id="dir2EE87E668A6861A2C8B6528214144568" Name="bin" />
<Directory Id="dir99C9EB95694B90A2CD31AD7E2F4BF7F6" Name="Decoders" />
</DirectoryRef>
</Fragment>
</Wix>
我想获得:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="AcquisitionFolder" xmlns:ns1="http://prerk">
<Directory Id="dir2EE87E668A6861A2C8B6528214144568" Name="bin" />
<Directory Id="dir99C9EB95694B90A2CD31AD7E2F4BF7F6" Name="Decoders" />
<ns1:dir>prueba</ns1:dir>
</DirectoryRef>
</Fragment>
</Wix>
节点中的新命名空间DirectoryRef
(例如(xmlns:ns1="http://prerk"
,它是一个非根并复制所有相同的节点。
我试过了,但找不到任何合适的解决方案。
你能告诉我吗?
您可以使用以下方法获得预期的结果:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
exclude-result-prefixes="wix">
<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="wix:DirectoryRef">
<DirectoryRef xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:ns1="http://prerk">
<xsl:apply-templates select="@*|node()"/>
<ns1:dir>prueba</ns1:dir>
</DirectoryRef>
</xsl:template>
</xsl:stylesheet>
尽管仅执行以下操作可能更简单:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
exclude-result-prefixes="wix">
<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="wix:DirectoryRef">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<ns1:dir xmlns:ns1="http://prerk">prueba</ns1:dir>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
要获得语义上相同的结果,请执行以下操作:
<?xml version="1.0" encoding="utf-16"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="AcquisitionFolder">
<Directory Id="dir2EE87E668A6861A2C8B6528214144568" Name="bin" />
<Directory Id="dir99C9EB95694B90A2CD31AD7E2F4BF7F6" Name="Decoders" />
<ns1:dir xmlns:ns1="http://prerk">prueba</ns1:dir>
</DirectoryRef>
</Fragment>
</Wix>