XSLT - 逐个获取节点

时间:2016-10-25 06:31:00

标签: xml xslt

我有一个像这样的xml,

onItemClick(View v, String id)

我需要使用xslt将其转移到不同的结构

预期产出:

  People peopleDetailsObj=null;
  for(People ple:peopleList)
  {
    if(ple.getId().equals(peopleID)){
  peopleDetailsObj=ple;
     break;
   }}

我写了以下xslt来执行此操作,

注意:<doc> <data/> <books> <name>abc</name> <name>def</name> </books> <link> <booklink>abc.com</booklink> <booklink>def.com</booklink> </link> </doc> 可以少于<doc> <link ref="abc.com">abc</link> <link ref="def.com">def</link> <books> <name>abc</name> <name>def</name> </books> <link> <booklink>abc.com</booklink> <booklink>def.com</booklink> </link> </doc> 。例如,它可以<booklink>可用。如果是这样,则只有第一个<name>才能获得该链接。如果没有<booklink>可用,则<name>中不应显示任何链接。否则<booklink>应按文件顺序(位置)添加。

<name>

但我目前的输出是,

<booklink>

所以我无法逐一获取booklink和名字..任何建议我该如何做?

1 个答案:

答案 0 :(得分:1)

我建议采用不同的方法:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="data">
    <xsl:for-each select="/doc/link/booklink">
        <xsl:variable name="i" select="position()" />
        <link ref="{.}">
            <xsl:value-of select="/doc/books/name[$i]"/>
        </link>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>