环境: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>
答案 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 -->
然后,这只是一个使用or
或and
的问题,具体取决于您要检查的条件。如果您想在字段或属性不存在的情况下使用替代答案,则可以使用:
<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>