Xml 使用XSL并在CSV文件中垂直显示数据 数据源

Xml 使用XSL并在CSV文件中垂直显示数据 数据源,xml,csv,xslt,xslt-2.0,Xml,Csv,Xslt,Xslt 2.0,我尝试采用以下XML结构,并使用XSL将其转换为CSV文件 <Root> <Row> <Employee>Harry</Employee> <Employees_Manager_1>Ron</Employees_Manager_1> <Employees_Manager_2>Hermione</Employees_Manager_2> <Employees_M

我尝试采用以下XML结构,并使用XSL将其转换为CSV文件

<Root>
  <Row>
    <Employee>Harry</Employee>
    <Employees_Manager_1>Ron</Employees_Manager_1>
    <Employees_Manager_2>Hermione</Employees_Manager_2>
    <Employees_Manager_3>Ginni</Employees_Manager_3>
  </Row>
  <Row>
    <Employee>Ross</Employee>
    <Employees_Manager_1>Emma</Employees_Manager_1>
    <Employees_Manager_2>Monica</Employees_Manager_2>
    <Employees_Manager_3>Rachel</Employees_Manager_3>
  </Row>
</Root>
失败的尝试 我是XML/XSL的初学者,到目前为止,我只知道如何使用以下内容:

<xsl:template match="Root">
  <xsl:for-each select="Row">
    <xsl:value-of select="Employee"/>
    <text>,</text>
    <xsl:value-of select="Employees_Manager_1"/>
    <text>,</text>
    <xsl:value-of select="Employees_Manager_2"/>
    <text>,</text>
    <xsl:value-of select="Employees_Manager_3"/>
    <text>,</text>
    <endTag>&#xD;&#xA;</endTag>
  </xsl:for-each>
</xsl:template>
问题:
有没有办法通过XSL获得我想要的输出?谢谢。

你可以试试这个

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:template match="Root">
        <xsl:for-each select="Row">
            <xsl:value-of select="Employee"/>
            <text>,</text>
            <xsl:value-of select="Employees_Manager_1"/>
            <text>,</text>
            <xsl:text>&#xD;&#xA;</xsl:text>
            <xsl:value-of select="Employee"/>
            <text>,</text>
            <xsl:value-of select="Employees_Manager_2"/>
            <text>,</text>
            <xsl:text>&#xD;&#xA;</xsl:text>
            <xsl:value-of select="Employee"/>
            <text>,</text>
            <xsl:value-of select="Employees_Manager_3"/>
            <text>,</text>
            <xsl:text>&#xD;&#xA;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

,
,

;
,
,

;
,
,

;

演示:

你可以试试这个

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:template match="Root">
        <xsl:for-each select="Row">
            <xsl:value-of select="Employee"/>
            <text>,</text>
            <xsl:value-of select="Employees_Manager_1"/>
            <text>,</text>
            <xsl:text>&#xD;&#xA;</xsl:text>
            <xsl:value-of select="Employee"/>
            <text>,</text>
            <xsl:value-of select="Employees_Manager_2"/>
            <text>,</text>
            <xsl:text>&#xD;&#xA;</xsl:text>
            <xsl:value-of select="Employee"/>
            <text>,</text>
            <xsl:value-of select="Employees_Manager_3"/>
            <text>,</text>
            <xsl:text>&#xD;&#xA;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

,
,

;
,
,

;
,
,

;

演示:

在XSLT 2/3中,为了将XML映射到CSV,我通常将模板应用于应该映射到CSV中某行的元素,然后使用带有
分隔符的
xsl:value
为每行输出任何项:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="Root/Row/(* except Employee)"/>
  </xsl:template>

  <xsl:template match="Row/*">
      <xsl:value-of select="preceding-sibling::Employee, ." separator=","/>
      <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>




在XSLT 2/3中,为了将XML映射到CSV,我通常将模板应用于应该映射到CSV中某行的元素,然后使用
xsl:value of
分隔符
属性为每行输出任何项:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="Root/Row/(* except Employee)"/>
  </xsl:template>

  <xsl:template match="Row/*">
      <xsl:value-of select="preceding-sibling::Employee, ." separator=","/>
      <xsl:text>&#10;</xsl:text>
  </xsl:template>

</xsl:stylesheet>




非常感谢您!!!嗯,现在看看你的解决方案,它看起来很明显。再次感谢!非常感谢你!!!嗯,现在看看你的解决方案,它看起来很明显。再次感谢!