每个'子节点上的逻辑正在跳过没有子节点的父节点

时间:2016-05-02 17:00:31

标签: xml node.js xslt

我是xslt的新手,让所有chidren节点显示的唯一方法是在xslt的开头为每个节点做一个。但是现在没有孩子的父母失踪了。请注意xml应该是一个扁平的csv并且工作正常,除了跳过父母的地方""节点不存在。

xlst:
 <wd:Report_Data xmlns:wd="urn:com.workday.report/Report">
<wd:Report_Entry>
    <wd:Employee_ID>100099999</wd:Employee_ID>
    <wd:ADDRESS>Any Street</wd:ADDRESS>
    <wd:CITY>Any City</wd:CITY>
    <wd:PTIN>45-9999999</wd:PTIN>
    <wd:Part_3_-_Employer_provided_self-insured_coverage>1</wd:Part_3_-_Employer_provided_self-insured_coverage>
    <wd:Part_3_-_Covered_Individuals>
        <wd:NAME>Jane</wd:NAME>
        <wd:NAME2>Doe</wd:NAME2>
        <wd:TIN>999999998</wd:TIN>
    </wd:Part_3_-_Covered_Individuals>
    <wd:Part_3_-_Covered_Individuals>
        <wd:Covered_Individual_Name>Jaelyn Polanco</wd:Covered_Individual_Name>
        <wd:NAME>Jean</wd:NAME>
        <wd:NAME2>Doe</wd:NAME2>
        <wd:TIN>999999999</wd:TIN>
    </wd:Part_3_-_Covered_Individuals>
</wd:Report_Entry>
<wd:Report_Entry>
    <wd:Employee_ID>100099998</wd:Employee_ID>
    <wd:ADDRESS>Any Street</wd:ADDRESS>
    <wd:CITY>Any City</wd:CITY>
    <wd:PTIN>45-9999999</wd:PTIN>
    <wd:Part_3_-_Employer_provided_self-insured_coverage>0</wd:Part_3_-_Employer_provided_self-insured_coverage>
</wd:Report_Entry>
</wd:Report_Data>  

XSLT:

 <xsl:for-each select="wd:Report_Data/wd:Report_Entry/wd:Part_3_-_Covered_Individuals">

                <xsl:choose>
                    <xsl:when test="../wd:Part_3_-_Employer_provided_self-insured_coverage !=1 "  > 
                        <xsl:value-of select="$quote" /><xsl:value-of select="../wd:PTIN"/><xsl:value-of select="$quote" /><xsl:value-of select="$delimiter" />
                    </xsl:when>
                    <xsl:otherwise> 
                        <xsl:value-of select="$quote" /><xsl:value-of select="../wd:PTIN"/><xsl:value-of select="$quote" /><xsl:value-of select="$delimiter" />
                    </xsl:otherwise>
                </xsl:choose>   

    <!-- <xsl:value-of select="$quote" /><xsl:value-of select="../wd:PTIN"/><xsl:value-of select="$quote" /><xsl:value-of select="$delimiter" />-->

                <xsl:choose>
                    <xsl:when test="../wd:EE_SSN=wd:TIN"  > 
                        <xsl:value-of select="$quote" />    <xsl:text>S</xsl:text><xsl:value-of select="$quote" /><xsl:value-of select="$delimiter" />
                    </xsl:when>
                    <xsl:otherwise> 
                            <xsl:value-of select="$quote" /><xsl:text>D</xsl:text><xsl:value-of select="$quote" /><xsl:value-of select="$delimiter" />
              </xsl:otherwise>

1 个答案:

答案 0 :(得分:0)

除了这一部分之外,你的问题很难理解:

  

让所有chidren节点显示的唯一方法是为每个节点做一个   在xslt的开头。但是现在没有孩子的父母是   丢失。

这根本不是真的。请考虑以下输入:

<强> XML

<root>
   <parent>
        <parent-id>101</parent-id>
        <child>
            <child-id>101-A</child-id>
        </child>
        <child>
            <child-id>101-B</child-id>
        </child>
   </parent>
   <parent>
        <parent-id>102</parent-id>
   </parent>
   <parent>
        <parent-id>103</parent-id>
        <child>
            <child-id>103-A</child-id>
        </child>
   </parent>
</root>

应用以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="parent[not(child)]">
    <xsl:value-of select="parent-id"/>
    <xsl:text>&#10;</xsl:text>
</xsl:template>

<xsl:template match="child">
    <xsl:value-of select="../parent-id"/>
    <xsl:text>,</xsl:text>
    <xsl:value-of select="child-id"/>
    <xsl:text>&#10;</xsl:text>
</xsl:template>

<xsl:template match="text()"/>

</xsl:stylesheet>

将导致:

101,101-A
101,101-B
102
103,103-A

即。每个孩子以及每个没有孩子的父母都有一排。