我有这个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" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension>
<Fragment>
<DirectoryRef Id="AcquisitionFolder">
<Directory Id="dir2EE87E668A6861A2C8B6528214144568" Name="bin" />
<Directory Id="dir99C9EB95694B90A2CD31AD7E2F4BF7F6" Name="Decoders" />
</DirectoryRef>
</Fragment>
</Wix>
这似乎是一个简单的问题,但我没有找到解决办法:-(我做了几次尝试,发现了几个类似的问题(例如这个问题:XSLT: Add namespace to root element),但他们没有帮助我
感谢您的任何建议!!!
答案 0 :(得分:6)
在许多情况下,您可以简单地将命名空间嵌入到投影的Xml元素(包括root)中,作为Literal Result Element的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/*[local-name()='Wix']">
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<xsl:copy-of select="node()|@*"/>
</Wix>
</xsl:template>
</xsl:stylesheet>
更正式/通常,输出xml中的任何名称空间都可以添加到stylesheet's own declaration中(全局或使用名称空间别名),例如
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wix="http://www.foo.com/2001/v1"
...other namespaces here>
...然后在输出中引用
<xsl:template match="/">
<wix:Wix>
<wix:Child>
...
如果结果输出中存在不需要/未使用的名称空间(例如,在源文档中需要,但不在输出文档中),则可以使用exclude-result-prefixes