如何为包含列表的xml编写XSLT

时间:2016-01-06 06:45:00

标签: xml xslt

我有一个看起来像这样的xml:

<Person>
 <Details>
  <AddressDetails>
   <Address>
    <street>3</street>
   </Address>
   <Address>
    <street>4</street>
   </Address>
   <Address>
    <street>5</street>
   </Address>
  </AddressDetails>
 </Details>
</Person>

我想将这个xml转换成这样的东西:

<Person>
 <Details>
  <AddressDetails>
   <Address>
    <Class>List</Class>
     <Results "REPEATINGTYPE= LIST">
      <Data>
       Contains all the data that is present in the dynamic address list.
      </Data>
      <Data>
      </Data>
     </Results>
   </Address>
   </AddressDetails>
  </Details>
</Person>

我写的XSL模板是:

<xsl:template match="/Person">
<Person>
<Details>
<AddressDetails>
<Address>
<Class>List</Class>
<Results REPEATINGTYPE= "LIST">
<xsl:for-each select="Address">
<Data>
<Street><xsl:value-of select="Street" /></Street>
</Data>
</Results>
</Address>
</AddressDetails>
</Details>
</Person>
</xsl:template>

但它没有拿起列表元素。有人可以帮忙吗?

修改

我得到的输出是:

<Person>
    <Details>
    <AddressDetails>
    <Address>
    <Class>List</Class>
    </Address>
    </AddressDetails>
    </Details>
</Person>

2 个答案:

答案 0 :(得分:0)

您发布的XSL无效:您没有xsl-for-each的结束标记。

此外,<xsl:for-each select="Address">不会从Person的上下文中选择任何内容;您需要将其更改为<xsl:for-each select="Details/AddressDetails/Address">

最后,XML区分大小写:当源元素名为<xsl:value-of select="Street" />时,street不会返回任何内容。

答案 1 :(得分:0)

所以你想把所有<Values>包裹在<Response>的{​​{1}}内吗?

使用<AllResults><data>的模板和其他所有内容的标识转换,例如:

<Response>