Xslt 如果DOM类列表包含特定类,请使用Saxon JS 2.1进行检查

Xslt 如果DOM类列表包含特定类,请使用Saxon JS 2.1进行检查,xslt,xslt-3.0,saxon-js,Xslt,Xslt 3.0,Saxon Js,Saxon JS不仅可以在浏览器中运行XSLT,还可以读写HTML内容。使用JavaScript,检查类“编辑”是否包含在元素类列表中可以通过 document.getElementById(id).classList.contains('edited') 但是如何用Saxon JS 2.1实现这一点呢 可能的方法似乎是 ixsl:get($node,'class')但是我不知道如何通过id指定节点(这将返回整个类列表) ixsl:eval('document.getElementById({

Saxon JS不仅可以在浏览器中运行XSLT,还可以读写HTML内容。使用JavaScript,检查类“编辑”是否包含在元素类列表中可以通过

document.getElementById(id).classList.contains('edited')
但是如何用Saxon JS 2.1实现这一点呢

可能的方法似乎是

ixsl:get($node,'class')
但是我不知道如何通过id指定节点(这将返回整个类列表)

ixsl:eval('document.getElementById({$id}).classList.contains('edited'))
但是我认为使用{$id}是不受支持的,并且“edited”使用的撇号已经用于包含eval参数和整个xpath语句(此处不包括)。所以单撇号和双撇号都不能用

ixsl:eval(document.getElementById(+'+$id++').classList.contains(+'+$class++'))
这里我遇到一个错误,指出“没有为xs:string类型的参数定义算术运算符”

ixsl:eval(concat('document.getElementById(',$id')).classList.contains(',$class'))
但即使这样也不起作用。它被编译成sef,但在运行时发生错误“无法读取null属性”


我知道我可以在HTML页面中编写JavaScript函数并调用自己的函数,但我想在XSLT脚本中完成它。

如果要返回任何符合该条件的XML元素,可以使用标准XPath表达式:

//*[@id eq $id][contains-token(@class, 'edited')]

请参阅:

我认为live HTML页面的内容只能通过提供的ixsl函数访问,并且不知道也可以使用Xpath。这就是为什么我没有使用您在中编辑的XSLT和XSLT-3.0标记,我认为它们会误导。谢谢你让我走上正轨。但是,您的表达式并没有捕获所有内容,因为我想在不存在上下文节点的函数中使用它。我最终得到了ixsl:page()/*[@id eq$id][contains token(@class,'edited')]@Andreas,确实
ixsl:page()/id($id)[contains token(@class,'edited')]]
也有效吗?@Martin Honnen:确实有效,但如何有效?@Andreas,在我看来,它像是
ixsl:page()/*[@id eq$id]
,如果HTML5上下文中的Saxon对DOM元素使用
id
,我认为它确实如此。说明:“fn:id()和element-with-id():这些函数选择DOM方法getElementById()返回的元素。”。