不在运动列表中的所有学生的 xslt 输出

Posted

技术标签:

【中文标题】不在运动列表中的所有学生的 xslt 输出【英文标题】:xslt output of all pupils not in the sports list 【发布时间】:2014-04-14 21:19:34 【问题描述】:

这是我的文件:

example.xml

 <?xml version="1.0" encoding="UTF-8"?>
    <bsp>
<numbers>
       <string>one</string>
       <string>two</string>
       <string>three</string>
       <string>one</string>
       <string>two</string>
       <string>four</string>
       <string>fife</string>
    </numbers>
</bsp>

complete.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <bsp>
<first>
    <team>
       <member>one</member>
       <member>three</member>
    </team>
    </first>
    <second>
    <mems>
       <member>four</member>
       <member>five</member>    
    </mems>
    </second>
</bsp>

输出

所有 not 完整(member 和 *stringÜ 的值完全匹配)。如何在 xslt 2.0 中使用一个巨大的文件来做到这一点?

首先我们需要访问文档。

预期输出

      <string>two</pupil>
      <string>two</pupil>
      <string>fife</string>

有什么方法可以做到这一点,推荐? 编辑 示例现在更抽象...

【问题讨论】:

学生是否在数据中按姓名标识?如果是这样,解决方案将受到潜在命名空间冲突的限制。例如,两个学生都叫“鲍勃·史密斯”。 嗯,这可能是因为我们在两个文件中都有 Bob Smith 好几次。我只是想知道,如果“示例”的实例之一不是“完整.xml”的一部分。我现在更抽象地重写了代码。 【参考方案1】:

如果您正在处理学生.xml,以下应该可以工作

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:output method="xml"/>

    <xsl:template match="/">
        <xsl:for-each select="school">
            <!-- to insert header for the school -->
            <xsl:for-each select="class">
                <!-- to insert header for the class -->
                <xsl:for-each select="pupil">
                    <xsl:if test="not(document('sports.xml')//member = .)">
                        <xsl:copy-of select="."/>
                    </xsl:if>
                </xsl:for-each>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

地点:

not( - 只获取那些不匹配的人 document('sports.xml') 来自这个文件 //member&lt;member&gt; 包围在任意深度 = .) 与我们正在处理的学生匹配。

【讨论】:

我已经编辑了我的文本,但您的代码有效。我现在可以根据自己的需要进行调整。非常感谢。

以上是关于不在运动列表中的所有学生的 xslt 输出的主要内容,如果未能解决你的问题,请参考以下文章

维护嵌套元素的分组方法 XSLT 2.0 - 分离多余的

选择属性的所有值并使用 XSLT 1.0 作为列表返回

如何使用 XSLT/XPath 生成逗号分隔的列表?

基于列表中的日期字段,在每一天对使用XSLT 1.0的列表进行分组

如何在 SharePoint 2010 的 XSLT 列表 Web 部件中隐藏列表功能区?

在一个列表中查找不在另一个列表中的项目[重复]