【发布时间】:2014-01-17 18:13:52
【问题描述】:
我有一个 xml 输入,有时可能有也可能没有定义 xmlns。 如何解决这种情况,只需一个 xsl 即可成功转换? 以下是两种情况下的输入和 xsl (1.0)
输入文件:
<?xml version="1.0" encoding="UTF-8"?>
<input version="2.1">
<Data>
<Object class="PM" operation="create" name="japan">
<p name="Active">1</p>
</Object>
<Object class="AM" operation="create" name="india">
<p name="Active">0</p>
</Object>
</Data>
</input>
没有命名空间定义的 XSL:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="Data">
<xsl:copy>
<xsl:apply-templates select="Object[@class='PM' or @class='AM']">
<xsl:sort select="@name"/>
</xsl:apply-templates>
<xsl:apply-templates select="Object[not(@class='PM' or @class='AM')]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Object[@operation = 'create' ]">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:attribute name="class">
<xsl:value-of select="concat(@class,'/TIME')"/>
</xsl:attribute>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
定义命名空间的输入xml:
<?xml version="1.0" encoding="UTF-8"?>
<input version="2.1" xmlns="xyz.xsd">
<Data>
<Object class="PM" operation="create" name="japan">
<p name="Active">1</p>
</Object>
<Object class="AM" operation="create" name="india">
<p name="Active">0</p>
</Object>
</Data>
</input>
虽然 xslt 没有抛出错误,但输出并没有按预期转换:(
欢迎使用单个 xsl 或任何想法来处理上述情况。
【问题讨论】:
-
它是一个特定的命名空间,可以存在也可以不存在 - 或者他们可以向你抛出任何随机命名空间?
-
是的,目前只有一个命名空间或者它不存在..还没有遇到随机的..