定制数据库收集所需的xslt解决方案

时间:2018-07-26 13:18:11

标签: xslt

我需要从以下源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内使用创建变量,但无法成功。我是新手,请在这里寻求帮助。在这里请求您的帮助。我在这里用更新的源代码和目标代码编辑了代码

1 个答案:

答案 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>