基本上这是我的XML,包含一些历史数据:
<events>
<entry day="1" year="1901" month="1">
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
</entry>
<entry day="1" year="1902" month="1">
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
</entry>
</events>
使用以下XSL和通过作业单进入的一些其他数据,应选择一个相应的条目:
<xsl:template match="/">
<ereignisse><xsl:call-template name="ereignisse"/></ereignisse>
</xsl:template>
<xsl:template name="ereignisse">
<xsl:apply-templates select="//events/entry[
(number(@year) = 1901) and
(number(@month) = 1) and
(number(@day) = 1)]">
</xsl:apply-templates>
</xsl:template>
所以输出现在是纯文本。但它应该看起来像:
<ereignisse>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
<event>Blablabla blablabla</event>
</ereignisse>
我尝试了几种方法但没有成功。希望你能帮助我...
答案 0 :(得分:2)
您的方法存在的问题是您要将模板应用于entry
- 但您没有匹配entry
的模板。在这种情况下,调用built-in template rules,效果是文本节点被复制。
要获得所需的输出,您可以省去大部分代码并简单地执行:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/events">
<ereignisse>
<xsl:copy-of select="entry[@year=1901 and @month=1 and @day=1]/event"/>
</ereignisse>
</xsl:template>
</xsl:stylesheet>