[英]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,'
')"/>
</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,'
')"/>
</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,'
')"/>
</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,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.