不在运动列表中的所有学生的 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
被<member>
包围在任意深度
= .)
与我们正在处理的学生匹配。
【讨论】:
我已经编辑了我的文本,但您的代码有效。我现在可以根据自己的需要进行调整。非常感谢。以上是关于不在运动列表中的所有学生的 xslt 输出的主要内容,如果未能解决你的问题,请参考以下文章
基于列表中的日期字段,在每一天对使用XSLT 1.0的列表进行分组