【发布时间】:2012-02-01 15:35:23
【问题描述】:
我有以下 XML 文件:
<titles>
<book title="XML Today" author="David Perry"/>
<book title="XML and Microsoft" author="David Perry"/>
<book title="XML Productivity" author="Jim Kim"/>
<book title="XSLT 1.0" author="Albert Jones"/>
<book title="XSLT 2.0" author="Albert Jones"/>
<book title="XSLT Manual" author="Jane Doe"/>
</titles>
以及消除@author 以“David”或“Jane”开头的元素的转换:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="author1-search" match="book[starts-with(@author, 'David')]" use="@title"/>
<xsl:template match="book [key('author1-search', @title)]" />
<xsl:key name="author2-search" match="book[starts-with(@author, 'Jane')]" use="@title"/>
<xsl:template match="book [key('author2-search', @title)]" />
<xsl:template match="@* | node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
预期的结果将是以下 XML 文件:
<titles>
<book title="XML Productivity" author="Jim Kim"/>
<book title="XSLT 1.0" author="Albert Jones"/>
<book title="XSLT 2.0" author="Albert Jones"/>
</titles>
在他对XSLT: Using variables in a key function 问题的回复中,Dimitre Novatchev 展示了使用迭代来显示所选作者编写的书籍的方法,该方法使用键和带有内联 xsl 参数的 Exslt 函数 node-set()
<xsl:param name="pAuthors">
<x>David Perry</x>
<x>Jane Doe</x>
</xsl:param>
是否可以应用此方法重写上述转换,使其使用 pAuthors 参数并仅包含一个通用搜索键(而不是 author1-search、author2-search 等)?不支持 XSLT 2.0 和 document() 函数。
提前致谢,李奥
【问题讨论】:
-
当前问题和上一个问题有什么区别?
-
@Leo68:“只包含一个通用搜索键”是什么意思?我想我已经完全回答了你之前的问题。你现在有什么新的要求?请定义新要求并向我们展示一个示例。
-
@DimitreNovaatchev 正如我在问题中提到的,您的示例允许显示所选作者撰写的书籍。我的任务是从上面的 xml 中消除几个元素。在示例 xslt 中,我使用了几个键来实现这个目标;问题是如何使用内联 xsl 参数 pAuthors 和一个通用键而不是 author1-search、author2-search 等来重写这个 xslt。非常感谢你的帮助,狮子座
-
在我的问题中,我明确表示我想重写示例 XSLT,它使用单个通用键和 pAuthors 参数消除了 @author 以“David”或“Jane”开头的元素.预期的结果是包含
,可以从将示例 XSLT 应用于 XML 文件中推断出来。我还在回复您的评论时提供了进一步的解释。您还需要哪些其他信息? -
@Leo68:不,你没有在问题中这么说。你现在这么说,只是在评论中,只有在被问到的时候。这些信息可以通过提供的代码来猜测,但依赖读者的猜测意味着这个问题没有很好地表述。请编辑问题并明确提供所需信息。请记住,在大多数情况下,您的代码可能并不重要并且可能会产生误导——真正需要的是源 XML 文档、想要的结果和转换的要求。
标签: xslt