【问题标题】:Why <xsl:value-of select="1"/> returns 1?为什么 <xsl:value-of select="1"/> 返回 1?
【发布时间】:2017-07-13 11:07:14
【问题描述】:

我正在使用 XSLT 样式表将 XML 转换为 HTML。转换引擎由Apache Xalan(2.7.0 版)提供。 Sax Parser 已配置为使用。

如果

<xsl:value-of select="1"/>

用于变换

<element>
    <hello>Hello World</hello>
</element>

输出

1

根据https://www.w3schools.com/xml/xsl_value_of.asp,xsl:value-of-Tag 根据给定的 XPath 表达式提取选定节点的值。

  • 为什么没有节点1却输出1?
  • 这个简单的转换是如何工作的?

【问题讨论】:

    标签: java xml xslt xpath


    【解决方案1】:

    xsl:value-of 指令返回对其select 属性中包含的表达式 的求值结果(在将结果转换为字符串之后)。

    XPath expression 可以包含数字、字符串文字、对节点或变量的引用、函数调用和运算符。表达式1 被评估为数字1。不能有名称为1 的节点(元素名称不能以数字开头)。

    【讨论】:

    • 所以xpath引擎不解析xml?
    • 我不确定我是否理解您的问题。 XPath 是一种语言,而不是引擎。 XPath 查看 XML 树(在它被解析之后)并提供解决它特定部分的方法。
    • 我说的是处理 xpath 表达式的库。
    • 让我问这个问题更准确。 xpath 处理库是否解析 xml,以防 xpath 表达式“1”。
    • 如果您在谈论 XSLT 处理器,它在解析后也可以在 XML 树上工作。但我仍然不明白这与你原来的问题有什么联系。处理器知道123是一个数字,因为它符合一个数字的lexical structure。以同样的方式,它知道+ 是一个运算符,root 是一个节点。
    【解决方案2】:

    通过使用代码

    &lt;xsl:value-of select="1"/&gt;

    您实际上是在告诉它返回字面值“1”。

    要检索元素中的值,它更像是以下内容:

    &lt;xsl:value-of select="hello"/&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多