根节点斜杠vs根节点名称

时间:2017-04-01 05:00:00

标签: xml xslt

为什么斜杠导致文件错误(无法打开xml文件)vs如果我在匹配中专门使用名称? Aren他们是同义词吗?

下面的代码片段:

  <xsl:template match="/"> <!-- In question, different results / vs root -->
    <xsl:apply-templates select="greeting"/>
  </xsl:template>

示例xslt

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

  <xsl:output method="html"/>

  <xsl:template match="/"> <!-- In question, different results / vs root -->
    <xsl:apply-templates select="greeting"/>
  </xsl:template>

  <xsl:template match="greeting">
    <html>
      <body>
        <h1>
          <xsl:value-of select="."/>
        </h1>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

示例xml

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="helloworld.xslt"?>
<root>
  <greeting>
    Hello, World!
  </greeting>
  <greeting>
    Hello, World Too!
  </greeting>
</root>

1 个答案:

答案 0 :(得分:2)

当您使用/时,您处于文档级别。

文档级别上唯一存在的元素是<root>元素。但是您使用select属性来表示,特别是将模板应用于名为greetings的元素,但这在文档级别上不存在,它存在于<root>元素中。

您有三种选择。

  1. 将其更改为<xsl:template match="/root">
  2. 删除选择<xsl:apply-templates />
  3. 将您的选择更改为<xsl:apply-templates select="root/greeting"/>