XSL遍历多个级别的XML并返回文本输出

时间:2018-04-06 13:01:05

标签: xml xslt-1.0

我需要使用XSL遍历XML输入并返回管道分隔的Text输出。 到目前为止,我已经达到了中途,我对XSL很新,并且到目前为止还没有。 下面是XML输入(这仅适用于一个Employee及其各自的家属):

<?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"/>
<xsl:template match="Employee_Traversal_Record">
    <xsl:copy-of select="Employee_1_Child_Group[1]/Employee_1_Detail_Record[1]/Employee_Number"/>
    <xsl:copy-of select="'|'"/>
    <xsl:copy-of select="Employee_1_Child_Group[1]/Employee_1_Detail_Record[1]/Last_Name"/>
    <xsl:copy-of select="'|'"/>
    <xsl:copy-of select="Employee_1_Child_Group[1]/Employee_1_Detail_Record[1]/First_Name"/>
    <xsl:copy-of select="'|'"/>
    <xsl:copy-of select="Employee_1_Child_Group/Employee_1_Detail_Record[Plan_Type='A']/Plan_Name"/>
    <xsl:copy-of select="'|'"/>
    <xsl:copy-of select="Employee_1_Child_Group/Employee_1_Detail_Record[Plan_Type='B']/Plan_Name"/>
    <xsl:copy-of select="'|'"/>
    <xsl:copy-of select="Employee_1_Child_Group/Employee_1_Detail_Record[Plan_Type='C']/Plan_Name"/>
</xsl:template>
</xsl:stylesheet>

以下是我现在制作的XSL:

uniq

要求:

  1. 根据同一行中的类型并排打印第一行的员工详细信息和对应的计划名称
  2. 根据类型打印以下行的相应员工相关详细信息及其对应计划名称
  3. 电流输出: 12345 | Doe | John | A Plan | B Plan | C Plan

    预期产出: 12345 | Doe | John | A Plan | B Plan | C Plan 12345 | Doe | Dependent1 | A Plan | B Plan | C Plan 12345 | Doe | Dependent2 | A Plan | B Plan | C Plan 12345 | Doe | Dependent3 | A Plan | B Plan | C Plan

    任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

在XSLT-1.0中,您可以遍历包含文本的所有节点,并使用any(Map<String, String>.class)将这些节点作为管道分隔的字符串输出,仅循环覆盖包含文本(//*)的节点。您只需要一个小模板:

[text()]

请注意,这会留下一个尾随管道,但这应该是一个简单的解决方法。

在此处查看:http://xsltfiddle.liberty-development.net/pPqsHT8