如何将xml中的嵌套节点解析为java中的csv
我可能忽略了这里的解决方案,但我需要帮助将xml转换为具有多个嵌套节点的csv。我得到的xml类似于以下示例:如何将xml中的嵌套节点解析为java中的csv,java,xml,csv,Java,Xml,Csv,我可能忽略了这里的解决方案,但我需要帮助将xml转换为具有多个嵌套节点的csv。我得到的xml类似于以下示例: <?xml version="1.0"?> <familyResponse> <results> <childResults> <childName>Mary</childName> <childAge>8</childAge> </chil
<?xml version="1.0"?>
<familyResponse>
<results>
<childResults>
<childName>Mary</childName>
<childAge>8</childAge>
</childResults>
<childResults>
<childName>Jason</childName>
<childAge>10</childAge>
</childResults>
<childResults>
<childName>Ashley</childName>
<childAge>15</childAge>
</childResults>
<parentResults>
<parentName>Theresa</parentName>
<parentAge>35</parentAge>
</parentResults>
</results>
<results>
<parentResults>
<parentName>Tom</parentName>
<parentAge>21</parentAge>
</parentResults>
</results>
<results>
<childResults>
<childName>Tori</childName>
<childAge>2</childAge>
</childResults>
<parentResults>
<parentName>Sheila</parentName>
<parentAge>19</parentAge>
</parentResults>
</results>
</familyResponse>
我已经有了java代码,可以解析xml,但我需要帮助处理嵌套节点
在我的xsl文件中,我尝试了以下操作:
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:value-of select="concat(parentResults/parentName,',',parentResults/parentAge,',',childResults/childName,',',childResults/childAge,'
')"/>
</xsl:for-each>
</xsl:template>
我也试过:
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(parentResults/parentName,',',parentResults/parentAge,',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//parentResults>
<xsl:value-of select="concat(parentName,',',parentAge)"/>
</xsl:for-each>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
我也试过:
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(parentResults/parentName,',',parentResults/parentAge,',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//parentResults>
<xsl:value-of select="concat(parentName,',',parentAge)"/>
</xsl:for-each>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
提前谢谢。谢谢德诺。我能够解决XSL的问题,但我还将研究您关于使用DOM解析器的建议。要使我的XSL正常工作,对它所做的更改是:
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(../parentResults/parentName,',',../parentResults/parentAge,',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
parentName,parentAge,childName,childAge
谢谢德诺。我能够解决XSL的问题,但我还将研究您关于使用DOM解析器的建议。要使我的XSL正常工作,对它所做的更改是:
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(../parentResults/parentName,',',../parentResults/parentAge,',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
parentName,parentAge,childName,childAge
不用担心XSL;通过使用DOM解析器(如JDOM、XOM或其他)和用于输出的专用CSV库(opencsv、supercsv等),您将获得更多的控制、更可维护的代码和更健壮的行为。感谢dnault。我能够解决XSL的问题,但我还将研究您关于使用DOM解析器的建议。为了让XSL发挥作用,对我的XSL所做的更改是:不用担心XSL;通过使用DOM解析器(如JDOM、XOM或其他)和用于输出的专用CSV库(opencsv、supercsv等),您将获得更多的控制、更可维护的代码和更健壮的行为。感谢dnault。我能够解决XSL的问题,但我还将研究您关于使用DOM解析器的建议。我对XSL的修改是:太好了,很高兴您让它工作了!您可能需要检查您是否有正确的行为,以防出现异常情况,例如名称包含逗号或双引号(这是在生成和解析CSV时需要特殊处理的特殊字符)。明白了。对于可能出现的逗号,我将通过在其周围使用“”来处理。如果我有任何问题,我将不得不考虑处理双引号。很高兴您能使用它!您可能需要检查您是否有正确的行为来处理异常情况,例如名称包含逗号或双引号(这是在生成和解析CSV时需要特殊处理的特殊字符)。明白了。对于可能的逗号,我将通过在其周围执行“”来处理它。如果我有双引号,我将不得不查看处理双引号的方法
<xsl:template match="/">parentName,parentAge,childName,childAge
<xsl:for-each select="//results>
<xsl:for-each select="//childResults>
<xsl:value-of select="concat(../parentResults/parentName,',',../parentResults/parentAge,',',childName,',',childAge,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>