我是XSL的新手,我需要一些细节来实现这个过程。 我想用xsl实现一个模板来获取父节点上的多个输出,你能不能帮我。
This is the input required now :
<parent>
<company>
<liv dt="2015-10-22" >
<Qty type ="NET"> 55</Qty>
<Qty type ="FAR"> 558</Qty>
<Qty type ="MAE"> 1222</Qty>
<HR amt ="NET"> 55</HR>
<Risk> adsm </Risk>
</liv>
<company>
</parent>
this is the output desired:I need to seprate the companies by Type, the other records should always appear as they were, Thanks a lot for the help:
<parent>
<company>
<liv dt="2015-10-22" ><Qty type ="NET"> 55</Qty>
<HR amt ="NET"> 55</HR>
<Risk> adsm </Risk>
</liv>
</company>
<company>
<liv dt="2015-11-1" ><Qty type ="FAR"> 558</Qty>
<HR amt ="NET"> 55</HR>
<Risk> adsm </Risk>
</liv>
</company>
<company>
<liv dt="2015-10-28" ><Qty type ="MAE"> 1222</Qty>
<HR amt ="NET"> 55</HR>
<Risk> adsm </Risk>
</liv>
</company>
</parent>
答案 0 :(得分:0)
为处理子项的company
元素编写模板,然后在liv
的模板中为父项包装:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="company">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="liv">
<xsl:element name="{name(..)}">
<xsl:copy-of select="."/>
</xsl:element>
</xsl:template>
</xsl:transform>
在http://xsltransform.net/3NJ38YT在线。
对于编辑的输入和输出示例,需要更多代码,这里是XSLT:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()" name="identity" mode="sub">
<xsl:param name="anchor"/>
<xsl:copy>
<xsl:apply-templates select="@*|node()" mode="sub">
<xsl:with-param name="anchor" select="$anchor"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="company">
<xsl:apply-templates select="liv/Qty" mode="split"/>
</xsl:template>
<xsl:template match="Qty" mode="split">
<xsl:apply-templates select="ancestor::company" mode="sub">
<xsl:with-param name="anchor" select="current()"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Qty" mode="sub">
<xsl:param name="anchor"/>
<xsl:if test="generate-id() = generate-id($anchor)">
<xsl:call-template name="identity"/>
</xsl:if>
</xsl:template>
</xsl:transform>