使用java和xsl将xml转换为csv时如何处理重复的节点名称

时间:2016-01-07 17:21:19

标签: java xml csv xslt

我从外部源获得了一个xml文件(因此我无法控制属性名称),不幸的是,它们对配对的数据集使用相同的名称。我似乎无法弄清楚如何访问第二个值。 xml文件中的数据示例如下:

<?xml version="1.0"?>
<addressResponse>
  <results>
      <ownerName>Name1</ownerName>
      <houseAddress>House1</houseAddress>
      <houseAddress>CityState1</houseAddress>
      <yearBuilt>Year1</yearBuilt>
  </results>
  <results>
      <ownerName>Name2</ownerName>
      <houseAddress>House2</houseAddress>
      <houseAddress>CityState2</houseAddress>
      <yearBuilt>Year2</yearBuilt>
  </results>
</addressResponse>

我已经将我的java代码放在一起并且可以解析xml但我需要帮助处理重复的属性名称。我希望我的csv文件如下所示:

owner,address,citystate,yearbuilt
Name1,House1,CityState1,Year1
Name2,House2,CityState2,Year2

在我的xsl文件中,我做了以下操作&#34;希望&#34;它会得到第二个houseAddress,但它没有:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/">owner,address,citystate,yearbuilt
<xsl:for-each select="//results>
    <xsl:value-of select="concat(ownerName,',',houseAddress,',',houseAddress,',',yearBuilt,'&#xA;')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

那给了我:

owner,address,citystate,yearbuilt
Name1,House1,House1,Year1
Name2,House2,House2,Year2

这样做有诀窍吗?我无法从发起人处更改属性名称,因此我坚持使用它们。提前谢谢。

1 个答案:

答案 0 :(得分:2)

使用:

houseAddress[2]

获取第二次出现houseAddress元素的值。

请注意,我们在这里假设XSLT 1.0。