我有以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:OrderChange ns0:transactionPurposeIndicator="Change" xmlns:ns0="http://www.api.org/pidXML">
<ns0:OrderChangeProperties>
<ns0:OrderChangeNumber>1</ns0:OrderChangeNumber>
<ns0:OrderChangeDate>2009-10-19</ns0:OrderChangeDate>
</ns0:OrderChangeProperties>
</ns0:OrderChange>
我需要将其转换为以下格式:
<?xml version="1.0" encoding="UTF-8"?>
<pidx:OrderChange pidx:transactionPurposeIndicator="Change" xmlns:pidx="http://www.api.org/pidXML" xmlns="http://www.api.org/pidXML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.api.org/pidXML Z:\integration\trunk\schemas\pidx\OrderChange_1-2.xsd">
<pidx:OrderChangeProperties>
<pidx:OrderChangeNumber>1</pidx:OrderChangeNumber>
<pidx:OrderChangeDate>2009-10-19</pidx:OrderChangeDate>
</pidx:OrderChangeProperties>
</pidx:OrderChange>
有人可以让我知道将进行此转换的XSL。 我已经尝试了几个XSL转换,但无法实现它。 真的很感谢所有的帮助
由于
答案 0 :(得分:2)
我们正在使用基于云的应用程序及其要求 非常严格。他们需要格式为i的XML 上文提到的。
嗯,它应该没有任何区别。如果是,那么&#34;他们&#34;做错了。
另外,如果您检查要使用的标签 格式(第二个代码)它有几个&#34;命名空间&#34;定义比在 as-is(第一个代码)所以我假设我需要&#34;命名空间替换&#34; 以及
添加这些是相对简单的,与更改名称空间前缀无关。无论如何,请尝试以下方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://www.api.org/pidXML"
xmlns:pidx="http://www.api.org/pidXML"
exclude-result-prefixes="ns0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="ns0:OrderChange">
<pidx:OrderChange xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.api.org/pidXML Z:\integration\trunk\schemas\pidx\OrderChange_1-2.xsd">
<xsl:apply-templates select="@*|node()"/>
</pidx:OrderChange>
</xsl:template>
<xsl:template match="*">
<xsl:element name="pidx:{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="pidx:{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:1)
如果基于云的应用程序坚持使用特定的名称空间前缀,那么您应该询问一些关于运行此服务的人员的能力的严重问题。这是非常糟糕的XML实践。
正式地说,XSLT 1.0无法控制输出中名称空间前缀的选择。它不应该重要,因此规范允许实现做他们喜欢的事情。但实际上,在几乎所有实际情况中,实际实现都将使用您在样式表中指定的前缀;在XSLT 2.0中,这已成为强制性的。所以来自@ michael.hor257k的解决方案使用
<xsl:element name="pidx:{local-name()}">
应该在实践中做到这一点,即使它没有保证。