1

我使用 xslt 2.0 将 xml 数据转换为 xml 文件。我创建了 xsl 来查找文件夹中的所有文件名,效果很好:

文件名.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>

任何人都可以帮忙吗?

编辑 我改变了

 <xsl:template match="*">

   <xsl:template match="/">

这解决了相同结果出现 9 次的问题(这个数字是从哪里来的)。

现在在您的帮助下,结果是:

<birdname>Papagei Wellensittich</birdname>
<birdname>Pfau</birdname>

Pfau是第二个 xml 文件中的鸟。唯一的问题是,document() 似乎自己做了一个 for-each。所以我没有在鸟名标签中单独列出所有鸟类..

    <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>
4

1 回答 1

1

尝试将您的元素放入xsl:for-each...

<xsl:for-each select="document($files)">    
    <birdname>
        <xsl:value-of select="//spbird"/>            
    </birdname>
</xsl:for-each>

注意:除非您尝试动态构建元素名称,否则没有理由使用xsl:element.

编辑

在 XSLT 2.0 中,xsl:value-of将为您提供spbird. 而不是xsl:for-each文档上的 a,您应该在spbird. 尝试将您的更改xsl:for-each为下面的示例。如果这不起作用,请在您的问题中添加鸟类文件的示例。

<xsl:for-each select="document($files)//spbird">    
    <birdname>
        <xsl:value-of select="."/>            
    </birdname>
</xsl:for-each>
于 2014-04-11T15:59:58.003 回答