如何在XPATH 2.0中使用“ <<”运算符?

时间:2019-07-13 10:10:09

标签: xslt operator-precedence xpath-2.0

我正在研究XPath 2.0中的Node比较的概念。 我正在使用前置运算符<<,并在下面收到错误消息:

  

与元素类型相关联的属性“ select”的值       “ xsl:序列”不得包含“ <”字符。

我尝试使用XPath 2.0优先于运算符

<xsl:sequence select="/Root/*[../H1[2] << .]"/>

下面是我尝试的代码。

输入:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
<H1>first</H1>
<p>Test</p>
<H1>second</H1>
<p/>
<p/>
<H1/>
<p/>
<p/>
</Root>

处理:我正在使用<<运算符选择前面的元素。

<?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
    <xsl:sequence select="/Root/*[../H1[2] << .]"/>     
    </xsl:template>
    </xsl:stylesheet>

问题:

  

与元素类型相关联的属性“ select”的值       “ xsl:sequence”不得包含“ <”字符。

预期结果:     通过使用<<运算符来查找H1 [2]元素的前一个元素。

2 个答案:

答案 0 :(得分:1)

要添加到马丁的答案中,如果您想避免将<<转换为&lt;&lt;,则只需切换<<运算符的参数顺序并使用{ {1}}(不需要转义),因此:

代替

>>

使用

<xsl:sequence select="/Root/*[../H1[2] &lt;&lt; .]"/>

答案 1 :(得分:0)

XPath语法为<<,但是在XML / XSLT文档中,您需要以&lt;&lt;对其进行转义。