Xml 使用XSL并在CSV文件中垂直显示数据 数据源
我尝试采用以下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
<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>
</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>
</xsl:text>
<xsl:value-of select="Employee"/>
<text>,</text>
<xsl:value-of select="Employees_Manager_2"/>
<text>,</text>
<xsl:text>
</xsl:text>
<xsl:value-of select="Employee"/>
<text>,</text>
<xsl:value-of select="Employees_Manager_3"/>
<text>,</text>
<xsl:text>
</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>
</xsl:text>
<xsl:value-of select="Employee"/>
<text>,</text>
<xsl:value-of select="Employees_Manager_2"/>
<text>,</text>
<xsl:text>
</xsl:text>
<xsl:value-of select="Employee"/>
<text>,</text>
<xsl:value-of select="Employees_Manager_3"/>
<text>,</text>
<xsl:text>
</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> </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> </xsl:text>
</xsl:template>
</xsl:stylesheet>
非常感谢您!!!嗯,现在看看你的解决方案,它看起来很明显。再次感谢!非常感谢你!!!嗯,现在看看你的解决方案,它看起来很明显。再次感谢!