Выбор xpath для элементов с пространствами имен - PullRequest
11 голосов
/ 30 марта 2009

Вот тривиальная, но действительная статья в 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>

Как заставить XPath выбрать title - article, если у него есть этот атрибут пространства имен?

1 Ответ

17 голосов
/ 30 марта 2009

Вам необходимо добавить псевдоним для вашего пространства имен и использовать этот псевдоним в 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>
...