увеличить группу полей дочернего узла на родительский узел - PullRequest
0 голосов
/ 29 апреля 2019

Необходимо получить выходной CSV-файл из xml, используя XSLT 2.0

Моя проблема в том, что мне нужно напечатать приращение поля отношения корабля на один

Issue Worker Node и зависимые узлы являются подузлами и должны печатать рабочую запись, а затем печатать соответствующие зависимые записи. Значения полей, заданных для отношения, должны увеличиваться в зависимости от количества зависимых. Пожалуйста, помогите мне Спасибо

Входной 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 голосов
/ 29 апреля 2019

С учетом правильно сформированного (!) 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...