簡體   English   中英

如何將xml中的嵌套節點解析為Java中的csv

[英]How to parse nested nodes in xml to csv in java

我可能在這里忽略了解決方案,但我需要幫助,將具有多個嵌套節點的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>

始終會有1個條目的parentResults。 不一定總是有childResults條目,也可能有多個childResults條目。 如果沒有childResults條目,則無需將parentResults放入文件中,我希望我的csv文件如下所示:

parentName,parentAge,childName,childAge
Theresa,35,Mary,8
Theresa,35,Jason,10
Theresa,35,Ashley,15
Sheila,19,Tori,2

我已經將我的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>

但這給了我:

parentName,parentAge,childName,childAge
Theresa,35,Mary,8
Sheila,19,Tori,2

我也試過這個:

<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
,,Mary,8
,,Jason,10
,,Ashley,15
,,Tori,2

我也試過這個:

<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>

但這給了我:

parentName,parentAge,childName,childAge
Theresa,35,Mary,8
,,Jason,10
,,Ashley,15
Sheila,19,Tori,2

提前致謝。

感謝dnault。 我能夠弄清楚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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM