【发布时间】:2015-09-19 01:25:25
【问题描述】:
XML:
<Report xmlns="https://defaultnamespace/abc">
<Conversion>
<Type>FirstElement</Type>
</Conversion>
<Conversion>
<Type>SecondElement</Type>
</Conversion>
<Conversion>
<Type>ThirdElement</Type>
</Conversion>
</Report>
wso2 代码:
<inSequence>
<iterate xmlns:cs="https://defaultnamespace/abc" continueparent="true" expression="//cs:Report/cs:Conversion" attachPath="//cs:Report">
<target>
<sequence>
<xslt ket="SampleXSLT.xslt"/>
</sequence>
</target>
</iterate>
</inSequence>
问题是上述迭代调解器仅在上述输入 XML 仅在其包含命名空间“https://defaultnamespace/abc”时才有效。
要求:
如果上述 XML 具有不同的命名空间,则迭代调解器不起作用。因此,我需要替代解决方案,以便迭代调解器动态获取来自 XML 的命名空间并进行转换。通过对代码进行少量修改,帮助我找到最佳解决方案。
新要求:
我在 XSLT 中也有类似的要求。
XML:
<Report xmlns="https://defaultnamespace/abc">
<Conversion>
<Type>FirstElement</Type>
</Conversion>
<Conversion>
<Type>SecondElement</Type>
</Conversion>
<Conversion>
<Type>ThirdElement</Type>
</Conversion>
<Last>This is last element</Last>
</Report>
XSLT:
<?xml version=1.0 encoding=UTF-8?>
<xsl:stylesheet xmlns:cs="https://defaultnamespace/abc">
<xsl:template match="/">
<xsl:for-each select="/cs:Report/cs:Conversion/cs:Type">
<xsl:element name="Converting"><xsl:value-of select="."/></xsl:element>
</xsl:for-each>
<xsl:element name="LastOne"><xsl:value-of select="/cs:Report/cs:Last"/> </xsl:element>
</xsl:template>
</xsl:stylesheet>
当输入 XML 具有不同的命名空间时,上述 XSLT 会失败。所以,我需要一个 XSLT,它可以从输入 XML 中动态获取命名空间并进行转换。
【问题讨论】:
标签: xml namespaces xslt-2.0 wso2esb xml-namespaces