0

假设我有以下 XML 块..

<items>
    <books>
        <book>
            <name>a</name>
            <author>b</author>
        </book>
        <book>
            <name>d</name>
            <author>e</author>
        </book>
    </books>

    <infos>
        <info>
            <id>1</id>
            <year>c</year>
        </info>
        <info>
            <id>2</id>
            <year>f</year>
        </info>
    </infos>
</items>

'info' 的每个实例对应于 'book' 的一个实例。如果 items/infos/info/id 是指书籍元素的位置。
我正在尝试输出以下内容...

a  
b  
c  

d
e
f

在此先感谢...任何帮助将不胜感激!

4

1 回答 1

0

如果第 n 个info元素匹配到第 n 个,book那么您可以通过仔细使用该position()函数来做到这一点。例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" />

  <xsl:template match="/">
    <xsl:apply-templates select="items/books/book" />
  </xsl:template>

  <xsl:template match="book">
    <xsl:variable name="bookNum" select="position()" />
    <xsl:variable name="info" select="/items/infos/info[$bookNum]" />
    <xsl:value-of select="name" />
    <xsl:text>&#x0A;</xsl:text>
    <xsl:value-of select="author" />
    <xsl:text>&#x0A;</xsl:text>
    <xsl:value-of select="$info/year" />
    <xsl:text>&#x0A;</xsl:text>
    <xsl:text>&#x0A;</xsl:text>
  </xsl:template>
</xsl:stylesheet>

尽管对于比这个简单示例更复杂的任何事情,我可能会为info元素定义一个单独<xsl:apply-templates select="/items/infos/info[$bookNum]" />的模板并将其放入book模板中,而不是将其全部内联。

于 2013-04-08T19:08:47.420 回答