xml - 按父节点递增子节点字段组
问题描述
需要使用 XSLT 2.0 从 xml 获取输出 CSV 文件
我的问题是我需要将关系船字段增量打印一
issue Worker Node和从属节点都是子节点,需要打印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 
</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>
</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>
</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
```
解决方案
给定格式正确的 (!) 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 </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> </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
推荐阅读
- python - 如何将条形图用作“温度计”?
- arrays - 有没有办法从 2 个也有不同大小的不同数组中制作对?
- java - 使用 GoogleAdsClient 的 Service Account 来制作 AdWordsSession
- browser - 使用 gatsby 开发时是否可以设置特定的浏览器?
- visual-studio-code - NPM 脚本未显示在资源管理器侧边栏中。如何再次向他们展示?
- macos - ping 正常但 curl 不起作用时无法在 macOS 上连接到 Internet
- linux - Debian:蓝牙扫描未显示任何结果
- android - 安装 HAXM 时收到一些警告消息,并且“silent_install.bat”无法识别错误............请帮助某人
- laravel - Laravel-Vuex:更新到数据库中未显示的记录
- reactjs - 将参数传递给 REACT Expo 中的类组件