Dot-Net
XSLT 使用預設命名空間轉換 XML 而不添加前綴?
我正在嘗試使用以下命名空間轉換 XML 文件,但無法找到一種方法使其與預設命名空間一起工作,而無需在輸出 XML 中添加前綴。
原始 XML 文件:
<pExport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://workflow.converga.com.au/compass">我可以通過向預設命名空間(最後一個)添加前綴來使其工作,但是如何在不添加前綴的情況下輸出 XML,可以通過在 .NET 4 中使用 XslCompiledTransform 來實現?
我可以通過向預設命名空間(最後一個)添加前綴來使其工作,但是如何在不添加前綴的情況下輸出 XML,可以通過在 .NET 4 中使用 XslCompiledTransform 來實現?
這是一個具體的例子:
這種轉變:
<xsl:stylesheet version="1.0" xmlns="http://workflow.converga.com.au/compass" xmlns:c="http://workflow.converga.com.au/compass" xmlns:ext="http://exslt.org/common" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="c ext xsl"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="pnewItem"> <item name="wine"> <price>3</price> <quantity>5000</quantity> </item> </xsl:param> <xsl:template match="node()|@*" name="identity"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> <xsl:template match="c:item[last()]"> <xsl:call-template name="identity"/> <xsl:copy-of select="ext:node-set($pnewItem)/*"/> </xsl:template> </xsl:stylesheet>在以下 XML 文件上應用 XslCompiledTransform 時:
<pExport xmlns="http://workflow.converga.com.au/compass"> <Goods> <item name="tobacco"> <price>5</price> <quantity>1000</quantity> </item> </Goods> </pExport>生成想要的(添加了新項目的相同 XML 文件),正確的結果:
<pExport xmlns="http://workflow.converga.com.au/compass"> <Goods> <item name="tobacco"> <price>5</price> <quantity>1000</quantity> </item> <item name="wine"> <price>3</price> <quantity>5000</quantity> </item> </Goods> </pExport>