按父节点递增子节点字段组

时间:2019-04-29 00:40:04

标签: xml xslt

需要使用XSLT 2.0从xml获取输出CSV文件

我的问题是我需要将关系飞船字段增量打印一个

issue Worker节点和从属节点是子节点,需要先打印worker记录,然后再打印对应的从属记录。关系项目归档值应根据受抚养者数量增加。请帮我谢谢

输入XML:

<Master>
        <Worker_group>
            <Emp_ID>1001</Emp_ID>
            <E_Name> Worker1 </E_Name>
        </Worker_group>
        <date>05-01-2019</date>
</Master>
<Master>
        <Worker_group>
            <Emp_ID>1002</Emp_ID>
            <E_Name> Worker2 </E_Name>
        </Worker_group>
        <date>04-25-2019</date>
        <Dependents_group>
            <Dep_Emp_ID>1002<Dep_Emp_ID>
            <D_Name> Dependent1 </Name>
        <Dependents_group>
        <Dependents_group>
            <Dep_Emp_ID>1002<Dep_Emp_ID>
            <D_Name> Dependent2 </Name>
        <Dependents_group>
        <Dependents_group>
            <Dep_Emp_ID>1002<Dep_Emp_ID>
            <D_Name> Dependent3 </Name>
        <Dependents_group>
</Master>
<Master>
        <Worker_group>
            <Emp_ID>1003</Emp_ID>
            <E_Name> Worker3 </E_Name>
        </Worker_group>
        <date>06-23-2019</date>
</Master>

使用Xslt:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" indent="no"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
    <xsl:text>id, relationship, Name, Date &#xa;</xsl:text>
  </xsl:template>

  <xsl:template match="/Master/Worker_group">
    <xsl:value-of select="Emp_id"/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select= ?????/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select="E_Name"/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select="Date"/>
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>
  <xsl:template match="/Master/Dependents_group">
    <xsl:value-of select="Dep_Emp_id"/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select= ?????/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select="D_Name"/>
    <xsl:text>, </xsl:text>
    <xsl:value-of select="Date"/>
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

输出

id, relationship, Name,date
1001,1,Worker1,05-01-2019
1002,1,Worker2,04-25-2019
1002,2,Dependent1,04-25-2019
1002,3,Dependent2,04-25-2019
1002,4,Dependent_3,04-25-2019
1003,1,Worker3,06-23-2019

```

1 个答案:

答案 0 :(得分:0)

给出一个格式正确(!)的XML输入:

XML

<Root>
    <Master>
        <Worker_group>
            <Emp_ID>1001</Emp_ID>
            <E_Name>Worker1 </E_Name>
        </Worker_group>
    </Master>
    <Master>
        <Worker_group>
            <Emp_ID>1002</Emp_ID>
            <E_Name>Worker2 </E_Name>
        </Worker_group>
        <Dependents_group>
            <Dep_Emp_ID>1001</Dep_Emp_ID>
            <D_Name>Dependent1 </D_Name>
        </Dependents_group>
        <Dependents_group>
            <Dep_Emp_ID>1001</Dep_Emp_ID>
            <D_Name>Dependent2 </D_Name>
        </Dependents_group>
        <Dependents_group>
            <Dep_Emp_ID>1001</Dep_Emp_ID>
            <D_Name>Dependent3 </D_Name>
        </Dependents_group>
    </Master>
    <Master>
        <Worker_group>
            <Emp_ID>1003</Emp_ID>
            <E_Name>Worker3 </E_Name>
        </Worker_group>
    </Master>
</Root>

以下样式表:

XSLT 1.0

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

<xsl:template match="/Root">
    <!-- header -->
    <xsl:text>id,relationship,Name&#10;</xsl:text>
    <!-- data -->
    <xsl:for-each select="Master/*">
        <xsl:value-of select="Emp_ID | Dep_Emp_ID"/>
        <xsl:text>,</xsl:text>
        <xsl:number count="*"/>
        <xsl:text>,</xsl:text>
        <xsl:value-of select="E_Name | D_Name"/>
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

将返回:

id,relationship,Name
1001,1,Worker1 
1002,1,Worker2 
1001,2,Dependent1 
1001,3,Dependent2 
1001,4,Dependent3 
1003,1,Worker3