gpt4 book ai didi

java - 将 xml 转换为 csv(第一行将标签名称作为列名称,第二行包含与列(标签)匹配的数据)

转载 作者:行者123 更新时间:2023-12-01 12:52:19 26 4
gpt4 key购买 nike

我目前正在将 xml 转换为 csv,在 csv 中应该有两行,第一行是 xml 中的所有标签名称(其中包含数据的标签),第二行是与第一行匹配的所有数据标签。我有两个单独的 xsl:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>

<xsl:template match="/">
<xsl:apply-templates select="//text()"/>
</xsl:template>

<xsl:template match="text()">
<xsl:copy-of select="."/>
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:template>
</xsl:stylesheet>

这个可以将我期望的第二行数据的 xml 转换为 csv。

我有以下xsl可以从xml中获取所有标签,但我只想要带有数据的标签,例如<Languages><Lanuage1>English</Language1><Lanuage2>French</Language2></Languages>我只需要标签 Language1 和 Language2

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
<xsl:if test="not(position()=last())">,</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

谁能解决上面的标签问题,并将这两个xsl组合起来。

谢谢。

最佳答案

怎么样:

<?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="/">
<xsl:variable name="nodes" select="//*[normalize-space(text()) != '']"/>
<xsl:for-each select="$nodes">
<xsl:value-of select="local-name()"/>
<xsl:if test="not(position()=last())">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>&#x0A;</xsl:text>
<xsl:for-each select="$nodes">
<xsl:value-of select="."/>
<xsl:if test="not(position()=last())">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

关于java - 将 xml 转换为 csv(第一行将标签名称作为列名称,第二行包含与列(标签)匹配的数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24129690/

26 4 0