<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<ns0:DataResponse xmlns:ns0="http://somenamspace/v1.0">
<ns0:ResponseId>
<ns0:RequestID>12345</ns0:RequestID>
</ns0:ResponseId>
<ns0:Payload>
<ns1:Product xmlns:ns1="http://anothernamespace/v1.x">
<ns1:ProductName>productName</ns1:ProductName>
<ns1:ProductIdentifier>12222</ns1:ProductIdentifier>
<ns1:ProdInst>
<ns1:Type>Conv</ns1:Type>
<ns1:Descr>Conventional Loan</ns1:Descr>
<ns1:AllowedTypes>
<ns1:ScheduleSchedule>true</ns1:ScheduleSchedule>
</ns1:AllowedTypes>
<ns1:prdExist>false</ns1:prdExist>
<ns1:AdditionalAttributes>
<ns1:AdditionalAttribute name="gura" value="C"/>
</ns1:AdditionalAttributes>
</ns1:ProdInst>
<ns1:ProductGroups>
<ns1:ProductGroupName>1111</ns1:ProductGroupName>
<ns1:ProductGroupName>2222</ns1:ProductGroupName>
</ns1:ProductGroups>
</ns1:Product>
<ns1:Product>
.......
</ns1:Product>
</ns0:Payload>
</ns0:DataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
------------------------------------
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns0="http://somenamespace/v1.0"
xmlns:ns1="http://anothernamespace/v1.x"
exclude-result-prefixes="ns1">
<xsl:output omit-xml-declaration="yes" indent="no" method="text"/>
<xsl:template match="ns1:Products">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
----------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://namespace/v1.x"
exclude-result-prefixes="ns1">
<xsl:output omit-xml-declaration="yes" indent="no" method="text"/>
<xsl:template match="/">
<xsl:for-each select="ns1:Product">
<xsl:value-of select="ns1:ProductName" />
<xsl:text>,</xsl:text>
<xsl:value-of select="ns1:ProdInst/ns1:Type" />
<xsl:text>,</xsl:text>
<xsl:value-of select="ns1:ProdInst/ns1:Descr" />
<xsl:text>,</xsl:text>
<xsl:value-of select="ns1:ProdInst/ns1:AdditionalAttributes/@gura" />
<xsl:text>,</xsl:text>
<xsl:for-each select="ns1:ProductGroups">
<xsl:value-of select="."/>
</xsl:for-each>,
</xsl:for-each>
</xsl:template>
基本上我正在尝试编写XSL以将所有这些“Product”内部属性值转换为CSV格式。我已经努力克服使用命名空间但仍然无法以完美的格式编写,有时候下一行的样式,如果我尝试了泛型,那么问题就是无法读取additionalAtrributes值。 对此的任何帮助都会很棒。
期望输出为 所有标签内部属性以CSV格式排列,并按顺序排列。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://somenamspace/v1.0"
xmlns:ns1="http://anothernamespace/v1.x"
exclude-result-prefixes="ns1">
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates select="ns1:Product"/>
</xsl:template>
<xsl:template match="ns1:Product">
<xsl:value-of select="*"/>
<xsl:apply-templates select="ns1:ProdInst"/>
<xsl:apply-templates select="ns1:ProductGroups"/>
</xsl:template>
<xsl:template match="ns1:ProdInst">
<xsl:value-of select="."/>
<xsl:apply-templates select="ns1:AllowedTypes"/>
<xsl:apply-templates select="ns1:AdditionalAttributes"/>
</xsl:template>
<xsl:template match="ns1:AllowedTypes">
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="ns1:AdditionalAttributes">
<xsl:for-each select="@*">
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我已经尝试过如上所述并且至少在同一行中得到了所有内容,但仍然不是逗号分隔,也不包括“AdditionalAttributes”。有人可以帮忙吗?
答案 0 :(得分:0)
请看一下这个解决方案:
<强> XSLT:强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://somenamspace/v1.0" xmlns:ns1="http://anothernamespace/v1.x"
exclude-result-prefixes="ns1">
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:for-each select="//ns1:Product">
<xsl:call-template name="getProduct">
<xsl:with-param name="Product" select="self::*"/>
</xsl:call-template>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
<xsl:template name="getProduct">
<xsl:param name="Product"/>
<xsl:variable name="ProductContent">
<xsl:for-each select="$Product/*">
<xsl:choose>
<xsl:when test="*">
<xsl:call-template name="getChild">
<xsl:with-param name="Child" select="*"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="@*">
<xsl:for-each select="@*">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:for-each>
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
<xsl:value-of select="substring($ProductContent,0,string-length($ProductContent))"/>
</xsl:template>
<xsl:template name="getChild">
<xsl:param name="Child"/>
<xsl:for-each select="$Child/node()">
<xsl:choose>
<xsl:when test="* and not(@*)">
<xsl:call-template name="getChild">
<xsl:with-param name="Child" select="*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="text()">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:when>
<xsl:when test="*">
<xsl:for-each select="@*">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:for-each>
<xsl:call-template name="getChild">
<xsl:with-param name="Child" select="*"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="not(*) and @*">
<xsl:for-each select="@*">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:if test="@*">
<xsl:for-each select="@*">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:for-each>
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:if test="$Child/@* and not($Child/node())">
<xsl:for-each select="$Child/@*">
<xsl:value-of select="."/>
<xsl:text>,</xsl:text>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<强>输出:强>
productName,12222,Conv,Conventional Loan,true,false,gura,C,1111,2222
produ222222222ctName,12222,Conv,Conventional Loan,true,false,gura,C,1111,2222