Python XSLT与名称空间的匹配

Python XSLT与名称空间的匹配,python,xml,xslt,xpath,lxml,Python,Xml,Xslt,Xpath,Lxml,我正在尝试使用Python3.6和lxml(即XSLT1.0和XPath1.0)从RelaxNG定义构建瓶形.py模板。我找不到获取起始模板名称的诀窍,在本例中,它是“AddressBook”。我需要从rng:grammar/rng:start/rng:start/rng:ref/@name而不是从rng:define/@name获得这个 这是我的xslt: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

我正在尝试使用Python3.6和lxml(即XSLT1.0和XPath1.0)从RelaxNG定义构建瓶形.py模板。我找不到获取起始模板名称的诀窍,在本例中,它是“AddressBook”。我需要从rng:grammar/rng:start/rng:start/rng:ref/@name而不是从rng:define/@name获得这个


这是我的xslt:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
                xmlns:rng="http://relaxng.org/ns/structure/1.0"
                exclude-result-prefixes="rng">
<xsl:output type="text"/>

<xsl:template match="/">
  <div>start
  <xsl:apply-templates select="rng:start"/>
  done</div>
</xsl:template>

<xsl:template match="rng:start">
  <div>Start
  <h1><xsl:value-of select="rng:ref/@name" /></h1>
  End</div>
</xsl:template>

开始
完成
开始
终点
第一个匹配有效,我得到了这个转换的结果

Start End
我在这里遗漏了什么?

您的问题不在于名称空间,而在于路径。你的指示:

<xsl:apply-templates select="rng:start"/>
或者——最好是IMHO——从以下内容开始:

<xsl:template match="/rng:grammar">



p.S.
xsl:output
采用
方法
属性,而不是
类型
。如果您正在输出XML/HTML,请不要使用输出方法
text

谢谢。我以为match=“/”将自动成为顶级语法节点。它是顶级节点。但是根元素不是树的顶部节点;其上方是根节点-请参见:
<xsl:apply-templates select="rng:grammar/rng:start"/>
<xsl:template match="/rng:grammar">