无法将XSLT模板应用于xml元素

时间:2013-08-06 12:36:03

标签: xml xslt

我有以下XML:

<?xml version="1.0"?>
<document xmlns="http://cnx.rice.edu/cnxml" xmlns:md="http://cnx.rice.edu/mdml" id="new" cnxml-version="0.7" module-id="new">

<metadata xmlns:md="http://cnx.rice.edu/mdml"
      mdml-version="0.5">

    <md:abstract>By the end of this section, you will be able to:
        <list>
            <item>Discuss the role of homeostasis in healthy functioning</item>
            <item>Contrast negative and positive feedback, giving one physiologic example of each mechanism</item>
        </list>
    </md:abstract>

我需要将模板应用于 md:abstract 元素。我有以下XSL代码:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:md="http://cnx.rice.edu/mdml/0.4">

<xsl:output omit-xml-declaration="yes" encoding="ASCII"/>

<xsl:template match="c:document">
<body>
    <xsl:apply-templates select="c:metadata"/>
    <xsl:apply-templates select="c:content"/>
</body>
</xsl:template>

<xsl:template match="c:metadata">
    <xsl:apply-templates select="md:abstract"/>
</xsl:template>

<xsl:template match="md:abstract">
    <xsl:apply-templates select="@*|node()"/>
</xsl:template>

但不幸的是,它没有捕获 md:abstract 元素。我想不通,想要是错的。

1 个答案:

答案 0 :(得分:2)

在您的文档中,您有xmlns:md="http://cnx.rice.edu/mdml",而在XSLT中,您有xmlns:md="http://cnx.rice.edu/mdml/0.4"。这些都不一样。命名空间必须在词法上与匹配相同(没有别名或超类)。

我自己经历过这个,尝试管理版本化命名空间,这是一场噩梦。要么它在您的示例中失败,要么最终明确地检查所有版本。如果它是您的命名空间,请删除该版本。

如果您正在设计它,您始终可以将该版本放在单独的属性中(如XSLT转换那样)。