xslt 1为什么我的属性值没有显示在浏览器中

时间:2017-09-07 20:30:21

标签: xslt xslt-1.0

环境:XSLT 1.0和互联网浏览器

两个问题,如果我可以:
1.就像主题所说的那样,为什么我的属性field1值没有在浏览器中显示?
2.如果@ field1和/或@ field2甚至存在,我将如何检查条件?

问题
当我在浏览器中打开XML文件时,页面是空白的,我期待"一个"

XSL                 

  <!---look at playground/stackoverflow/callvsapply example -->
  <xsl:template match="/data/leve1/level2/level3/target">
    <xsl:value-of select="@field1"/>
  </xsl:template>

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

XML

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="get_attributes_in_hierarchy.xslt"?>
<data>
  <level1>
    <level2>
      <level3>
        <target field1="one" field2="two"/>
      </level3>
    </level2>
  </level1>
</data>

2 个答案:

答案 0 :(得分:2)

根据安全设置,某些浏览器拒绝运行从本地文件存储加载的XSLT样式表,而不是从HTTP连接加载。

浏览器的开发者控制台上通常会有消息说明发生了什么。

第二个问题:要测试@field是否存在,请使用<xsl:if test="@field">...</xsl:if>,假设当前上下文是定义@field的元素。

答案 1 :(得分:1)

您需要更正XSL文件中的拼写错误:

<xsl:template match="/data/leve1/level2/level3/target">

更改为:

<xsl:template match="/data/level1/level2/level3/target">

至于测试字段或属性是否存在Michael Kay's answer是否正确,您可以测试标记或属性的名称:

<xsl:if test="@field1 or @field2">...</xsl:if> <!-- this tests if attributes field1 or field2 exist -->

然后,这只是一个使用orand的问题,具体取决于您要检查的条件。如果您想在字段或属性不存在的情况下使用替代答案,则可以使用:

<xsl:choose>
    <xsl:when test="@field1">
        <xsl:text>Attribute field1 exists</xsl:text>
    </xsl:when>
    <xsl:otherwise>
        <xsl:text>Attribute field1 doesn't exist</xsl:text>
    </xsl:otherwise>
<xsl:choose>