XSL模板不识别元素

时间:2018-04-15 13:11:31

标签: xml xslt

我是xml和xsl的新手,我努力让我的xsl文件正常工作。我有这个xml:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="recipes-to-html.xsl"?>
<?dsd href="recipes.dsd"?>
<collection xmlns="http://recipes.org"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://recipes.org recipes.xsd">
</collection>

我有这个xsl文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:r="http://recipes.org">

    <xsl:output method="xml"
                doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
                doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
                encoding="UTF-8"
                indent="yes"
    />
    <xsl:template match="collection">
        <html>
            <head>
                <title>Collection of Recipies</title>
            </head>
            <body>
                <h1>Collection of Recipies</h1>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

xml文件当然包含更多内容,但我已经在这里挣扎了。当我打开xml文件时没有显示任何内容,这表明它没有注册集合元素。但据我所知,我做的一切都是正确的。

有人可以帮帮我吗?

编辑: 我已经尝试过xsltproc,它说它无法解析文件。当我更换&#34;集合&#34;在xslt文件中匹配&#34; /&#34;有用。我不知道可以做些什么。

2 个答案:

答案 0 :(得分:1)

xpath-default-namespace="http://recipes.org"元素上使用xsl:stylesheet以确保路径表达式和匹配模式不使用名称中的任何前缀(例如collection)选择或匹配XML的默认命名空间中的元素输入文件。

答案 1 :(得分:0)

您已将默认命名空间http://recipes.org绑定到前缀r;你只需要在你的XPath中使用它......

<xsl:template match="r:collection">
    <html>
        <head>
            <title>Collection of Recipies</title>
        </head>
        <body>
            <h1>Collection of Recipies</h1>
        </body>
    </html>
</xsl:template>

您可能还应添加exclude-result-prefixes="r",以排除不需要/不需要的命名空间。

小提琴:http://xsltfiddle.liberty-development.net/jyH9rLY/2