我需要从以下源XML进行转换
<response_1 xmlns="http://www.example.org">
<lines>
<lineId>1</lineId>
<item>item1</item>
<configItem>
<lineId>1</lineId>
<configId>11</configId>
</configItem>
<configItem>
<lineId>1</lineId>
<configId>12</configId>
</configItem>
</lines>
<lines>
<lineId>2</lineId>
<item>item2</item>
<configItem>
<lineId>2</lineId>
<configId>21</configId>
</configItem>
<configItem>
<lineId>2</lineId>
<configId>22</configId>
</configItem>
</lines>
<lines>
<lineId>3</lineId>
<item>item3</item>
</lines>
</response_1>
以如下方式定位XML
<ns0:response_2 xmlns="http://www.example.org">
<ns0:lines>
<ns0:lineId>1</ns0:lineId>
<ns0:item>item1</ns0:item>
<ns0:configId>11</ns0:configId>
</ns0:lines>
<ns0:lines>
<ns0:lineId>1</ns0:lineId>
<ns0:item>item1</ns0:item>
<ns0:configId>12</ns0:configId>
</ns0:lines>
<ns0:lines>
<ns0:lineId>2</ns0:lineId>
<ns0:item>item2</ns0:item>
<ns0:configId>21</ns0:configId>
</ns0:lines>
<ns0:lines>
<ns0:lineId>2</ns0:lineId>
<ns0:item>item2</ns0:item>
<ns0:configId>22</ns0:configId>
</ns0:lines>
<ns0:lines>
<ns0:lineId>3</ns0:lineId>
<ns0:item>item3</ns0:item>
</ns0:lines>
</ns0:response_2>
我尝试在xslt内使用创建变量,但无法成功。我是新手,请在这里寻求帮助。在这里请求您的帮助。我在这里用更新的源代码和目标代码编辑了代码
答案 0 :(得分:1)
以上注释已经建议使用前缀或不使用前缀来处理默认名称空间http://www.example.org
,但是,如果输出XML中的元素需要与名称空间相对应的前缀,则可以使用以下模板来获取输出。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://www.example.org" >
<xsl:output method="xml" />
<xsl:strip-space elements="*" />
<xsl:template match="ns0:response_1">
<ns0:response_2>
<xsl:apply-templates />
</ns0:response_2>
</xsl:template>
<xsl:template match="ns0:configItem">
<ns0:lines>
<ns0:lineId><xsl:value-of select="ns0:lineId" /></ns0:lineId>
<ns0:item><xsl:value-of select="../ns0:item" /></ns0:item>
<ns0:configId><xsl:value-of select="ns0:configId" /></ns0:configId>
</ns0:lines>
</xsl:template>
<xsl:template match="ns0:lines[not(ns0:configItem)]">
<ns0:lines>
<ns0:lineId><xsl:value-of select="ns0:lineId" /></ns0:lineId>
<ns0:item><xsl:value-of select="ns0:item" /></ns0:item>
</ns0:lines>
</xsl:template>
<xsl:template match="ns0:lineId | ns0:item" />
</xsl:stylesheet>