缺少XSL元素

时间:2015-08-22 12:47:58

标签: xml xslt

基本上这是我的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>

我尝试了几种方法但没有成功。希望你能帮助我...

1 个答案:

答案 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>
相关问题