提问人:U. Windl 提问时间:11/3/2023 更新时间:11/3/2023 访问量:41
为什么 '<input pattern=“^[^ ]{2,}.*[^ ]$”>' 触发 “XPath 处理错误:预期二进制运算符”?
Why does `<input pattern="^[^ ]{2,}.*[^ ]$">` trigger "XPath processing error: Binary operator expected"?
问:
我有带有XSL的XML文件来处理它。
使用像 这样的输入元素就可以正常工作。
但是,当我将其更改为 ,Firefox ESR 115.3.1 抱怨:<input pattern="^[^ ].*[^ ]$">
<input pattern="^[^ ]{2,}.*[^ ]$">
Fehler beim Laden des Stylesheets: XPath-Verarbeitungsfehler: Binärer Operator erwartet:
(英语(最有可能):“加载样式表时出错:XPath 处理错误:应为二进制运算符:")
我完全不明白如何调试它,是什么触发了错误,以及如何修复它(当我之前添加反斜杠时,我收到了一条不同的错误消息,说“找到无效字符:”)。{
}
更难理解的是,错误消息中缺少任何详细信息(如行、标记),当我尝试显示源代码时,我只得到一个空窗口。
几乎最小的例子
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="#default"?>
<xsl:stylesheet id="default" version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:test="test"
exclude-result-prefixes="xsl test">
<test:XML>
<order>
</order>
</test:XML>
<xsl:output method="html" encoding="UTF-8" indent="yes"/>
<xsl:template match="/xsl:stylesheet">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="xsl:*" /><!-- ignore -->
<xsl:template match="test:XML/order">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form>
<input id="customer-name" type="text" name="i.user.name"
size="25" maxlength="40" placeholder="Name"
pattern="^[^ ]{2,}.*[^ ]$" required="required" />
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答:
3赞
Martin Honnen
11/3/2023
#1
XSLT 使用大括号和属性值作为所谓的属性值模板来分隔嵌入的 XPath 表达式。因此,在 XSLT 中,在此类属性中,如果您想要一个文字 or ,则需要将它们加倍,例如 和 ,例如 .{
}
{
}
{{
}}
pattern="^[^ ]{{2,}}.*[^ ]$"
评论
0赞
U. Windl
11/3/2023
出于额外的好奇心:尽管有大括号,但在模式中还有其他我应该小心的字符吗?
0赞
Martin Honnen
11/3/2023
@U.Windl,这与 HTML 或元素及其属性无关,您使用的是 XSLT,并且允许在(文本结果)元素属性中使用属性值模板,因此您需要使用转义机制(即加倍)以确保它们从字面上插入到结果树中。XSLT还有一些其他的、通用的、基于XML的语法要求(如需要转义为和作为)。input
pattern
<
<
&
&
评论