我正在研究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]元素的前一个元素。
答案 0 :(得分:1)
要添加到马丁的答案中,如果您想避免将<<
转换为<<
,则只需切换<<
运算符的参数顺序并使用{ {1}}(不需要转义),因此:
代替:
>>
使用:
<xsl:sequence select="/Root/*[../H1[2] << .]"/>
答案 1 :(得分:0)
XPath语法为<<
,但是在XML / XSLT文档中,您需要以<<
对其进行转义。