具有命名空间的元素的xpath选择

时间:2009-03-30 12:31:00

标签: xslt xpath namespaces

这是一篇琐碎但有效的Docbook文章:

<?xml version="1.0" encoding="utf-8"?>
<article xmlns="http://docbook.org/ns/docbook" version="5.0">
<title>I Am Title</title>
<para>I am content.</para>
</article>

这是一个样式表,如果我删除上面的title属性,则会选择xmlns,而不是我将其保留在其中:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
    <xsl:template match="/">
        <xsl:apply-templates select="article"/>
    </xsl:template>
    <xsl:template match="article">
      <p><xsl:value-of select="title"/></p>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

如果有titlearticle,如果它具有该命名空间属性,如何让XPath说话?

1 个答案:

答案 0 :(得分:17)

您需要为命名空间添加别名,并在XPath中使用该别名

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:a="http://docbook.org/ns/docbook"
   exclude-result-prefixes="a"
   >
<xsl:output method="html"/>
    <xsl:template match="/">
        <xsl:apply-templates select="a:article"/>
    </xsl:template>
    <xsl:template match="a:article">
      <p><xsl:value-of select="a:title"/></p>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>