我使用XSLT2.0将xml数据转换为xml文件。我创建xsl是为了查找文件夹中的所有文件名,该文件夹运行良好:
filenames.xml
<?xml version="1.0" encoding="UTF-8"?>
<filelist>
<file>birds2014.xml</file>
<file>birds2013.xml</file>
</filelist>然后,我创建了一个xsl,用于在xml文件中搜索,以选择所有文档中标记<spbird>中的所有鸟类的名称。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:apply-templates/>
<xsl:variable name="files" select="document('filelist.xml')/filelist/file"/>
<xsl:element name="birdname">
<xsl:for-each select="document($files)">
<xsl:value-of select="//spbird">
</xsl:value-of>
</xsl:for-each>
</xsl:element>
</xsl:template>结果:
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>
<birdname>Papagei Wellensittich Pfau</birdname>预期:
<birdname>Papagei</birdname>
<birdname>Wellensittich</birdname>
<birdname>Pfau</birdname>有人能帮忙吗?
编辑i更改了
<xsl:template match="*">至
<xsl:template match="/">这解决了相同的结果显示9次的问题(这个数字从哪里来的)。
现在,在您的帮助下,结果是:
<birdname>Papagei Wellensittich</birdname>
<birdname>Pfau</birdname>Pfau是第二个xml文件中的鸟。唯一的问题是,这个文档()似乎是由它自己完成的。所以我没有把所有的鸟都分别列在鸟名标签上。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="*">
<xsl:apply-templates/>
<xsl:variable name="files" select="document('filelist.xml')/filelist/file"/>
<xsl:for-each select="document($files)">
<birdname>
<xsl:value-of select="//spbird">
</birdname>
</xsl:value-of>
</xsl:for-each>
</xsl:element>
</xsl:template>发布于 2014-04-11 15:59:58
试着把你的元素放入xsl:for-each..。
<xsl:for-each select="document($files)">
<birdname>
<xsl:value-of select="//spbird"/>
</birdname>
</xsl:for-each>注意:除非您试图动态构建元素名,否则没有理由使用xsl:element。
编辑
在XSLT2.0中,xsl:value-of将为您提供spbird的每个值。与文档上的xsl:for-each不同,您应该在spbird上执行for-每一个操作。尝试将您的xsl:for-each更改为下面的示例。如果这不起作用,请在你的问题中添加一个鸟类文件的例子。
<xsl:for-each select="document($files)//spbird">
<birdname>
<xsl:value-of select="."/>
</birdname>
</xsl:for-each>https://stackoverflow.com/questions/23017078
复制相似问题