我有以下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 元素。我想不通,想要是错的。
答案 0 :(得分:2)
在您的文档中,您有xmlns:md="http://cnx.rice.edu/mdml"
,而在XSLT中,您有xmlns:md="http://cnx.rice.edu/mdml/0.4"
。这些都不一样。命名空间必须在词法上与匹配相同(没有别名或超类)。
我自己经历过这个,尝试管理版本化命名空间,这是一场噩梦。要么它在您的示例中失败,要么最终明确地检查所有版本。如果它是您的命名空间,请删除该版本。
如果您正在设计它,您始终可以将该版本放在单独的属性中(如XSLT转换那样)。