Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将xml中的嵌套节点解析为java中的csv_Java_Xml_Csv - Fatal编程技术网

如何将xml中的嵌套节点解析为java中的csv

如何将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转换为具有多个嵌套节点的csv。我得到的xml类似于以下示例:

<?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,'&#xA;')"/>
  </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,'&#xA;')"/>
    </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,'&#xA;')"/>
    </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,'&#xA;')"/>
    </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,'&#xA;')"/>
    </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,'&#xA;')"/>
    </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,'&#xA;')"/>
    </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,'&#xA;')"/>
    </xsl:for-each>
  </xsl:for-each>
</xsl:template>