首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从xml文件中选择

从xml文件中选择
EN

Stack Overflow用户
提问于 2014-04-11 15:46:13
回答 1查看 49关注 0票数 1

我使用XSLT2.0将xml数据转换为xml文件。我创建xsl是为了查找文件夹中的所有文件名,该文件夹运行良好:

filenames.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<filelist>
   <file>birds2014.xml</file>
   <file>birds2013.xml</file>
</filelist>

然后,我创建了一个xsl,用于在xml文件中搜索,以选择所有文档中标记<spbird>中的所有鸟类的名称。

代码语言:javascript
运行
复制
    <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>

结果:

代码语言:javascript
运行
复制
<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>

预期:

代码语言:javascript
运行
复制
<birdname>Papagei</birdname>
<birdname>Wellensittich</birdname>
<birdname>Pfau</birdname>

有人能帮忙吗?

编辑i更改了

代码语言:javascript
运行
复制
 <xsl:template match="*">

代码语言:javascript
运行
复制
   <xsl:template match="/">

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

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

代码语言:javascript
运行
复制
<birdname>Papagei Wellensittich</birdname>
<birdname>Pfau</birdname>

Pfau是第二个xml文件中的鸟。唯一的问题是,这个文档()似乎是由它自己完成的。所以我没有把所有的鸟都分别列在鸟名标签上。

代码语言:javascript
运行
复制
    <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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 15:59:58

试着把你的元素放入xsl:for-each..。

代码语言:javascript
运行
复制
<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更改为下面的示例。如果这不起作用,请在你的问题中添加一个鸟类文件的例子。

代码语言:javascript
运行
复制
<xsl:for-each select="document($files)//spbird">    
    <birdname>
        <xsl:value-of select="."/>            
    </birdname>
</xsl:for-each>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23017078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档