【发布时间】:2010-05-12 19:39:02
【问题描述】:
我正在尝试从 XML 数据创建一个清单列表(制表符分隔的文本,用于输出)。问题是,我需要根据在 XML 中找到的数字,取出我创建的行并多次列出(迭代???)。所以,从下面的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<library>
<aisle label="AA">
<row>bb</row>
<shelf>a</shelf>
<books>4</books>
</aisle>
<aisle label="BB">
<row>cc</row>
<shelf>d</shelf>
<books>3</books>
</aisle>
</library>
我需要获取在“books”中找到的值,然后复制文本行该次数。结果如下所示:
Aisle Row Shelf Titles
AA bb a
AA bb a
AA bb a
AA bb a
BB cc d
BB cc d
BB cc d
这样盘点员就可以在每个架子上找到标题。我有我的 XSL 的基本结构,但我不确定如何执行“迭代”部分。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="2.0">
<xsl:output omit-xml-declaration="yes"/>
<xsl:variable name="tab" select="'	'"/>
<xsl:variable name="newline" select="' '"/>
<xsl:template match="/">
<!-- Start Spreadsheet header -->
<xsl:text>Aisle</xsl:text>
<xsl:value-of select="$tab"/>
<xsl:text>Row</xsl:text>
<xsl:value-of select="$tab"/>
<xsl:text>Shelf</xsl:text>
<xsl:value-of select="$tab"/>
<xsl:text>Titles</xsl:text>
<xsl:value-of select="$newline"/>
<!-- End spreadsheet header -->
<!-- Start entering values from XML -->
<xsl:for-each select="library/aisle">
<xsl:value-of select="@label"/>
<xsl:value-of select="$tab"/>
<xsl:value-of select="row"/>
<xsl:value-of select="$tab"/>
<xsl:value-of select="shelf"/>
<xsl:value-of select="$tab"/>
<xsl:value-of select="$tab"/>
<xsl:value-of select="$newline"/>
</xsl:for-each>
<!-- End of values from XML -->
<!-- Iteration of the above needed, based on count value in "books" -->
</xsl:template>
</xsl:stylesheet>
任何帮助将不胜感激。对于初学者来说,“迭代”这个词是否合适?
谢谢!
【问题讨论】:
-
好问题! (+1)。请参阅我对简单 XSLT 1.0 递归解决方案的回答。 :)
-
一般评论:好的,所以这两种解决方案都运行良好,尽管我使用了 XSLT 2.0。我在我的 cmets 中列出的所有“致命错误”都不是代码的错误,而是由旧的“垃圾进垃圾出”问题引起的,经过反复试验,我终于发现实际上有原始 XML 数据中的问题。再次感谢 Dimitre 的帮助!