【问题标题】:Simple JavaScript XPath syntax pattern validator (no context)?简单的 JavaScript XPath 语法模式验证器(无上下文)?
【发布时间】:2014-05-21 15:39:03
【问题描述】:

我有一个文本字段,用户可以在其中键入 XPath。 我只是在寻找一种简单的方法来验证 XPath 模式,使其成为 XML 的验证模式。

我没有要检查的 XSD 或任何东西,所以我猜一个简单的正则表达式就足够了。 但我并不真正了解 XPath 的所有具体内容以及允许哪些内容不可以。

试图环顾网络,但只找到 XPath to XSD / XML 文件验证器。

编辑:我不想/不知道上下文是什么,我只想验证合成器。 简而言之,我正在寻找XPathExpression.Compile(String) 方法。

【问题讨论】:

    标签: javascript xml regex xpath


    【解决方案1】:

    XSLT/XPath 的客户端支持非常不一致(它们都以某种方式支持它,但有很多不同之处)。

    如果我是你,我肯定会将其移植到服务器端 Web 服务中。例如,在 PHP 中,您可以使用 Simple XMLDOMDocument 类来运行 - 并因此检查 - XPath 表达式的有效性。

    使用任意标记中的任何一个,您可以测试 XPath 是否有效(或者更准确地说,PHP 库是否认为有效。)

    $xpath = "foo/bar@"; //<-- invalid XPath
    $sxe = new SimpleXMLElement("<foo />");
    die(@$sxe->xpath('valid@') ? 'valid' : 'invalid');
    

    ...输出“有效”或“无效”,您的 AJAX 调用(将调用 Web 服务)可以查找。

    【讨论】:

    • 感谢您的输入,但我使用的是 angular 和 java 后端,我希望让表单验证服务器端,因为只向我的后端发送有效数据。
    【解决方案2】:

    查看Wicked Good XPath: a faster JavaScript XPath library

    这将实现document.evaluate(),如果给定一个无效的XPath,它将抛出XPathException。还有一个 createExpression() 函数,如果您实际上还不需要评估文档的 XPath,您可能更喜欢它。

    (您真的不想使用正则表达式来解析 XPath。)

    【讨论】:

    • 谢谢,但是我不想“评估”指向文档/上下文的 xpath。我只想验证xpath的synthax,不知道文档/xsd会是什么。
    • 然后查看createExpression()。答案已更新。
    • 谢谢,以前看过,但认为解析器不能为空。但事实上它可以。所以我设置了一个 try catch 方法,它似乎有点工作。但是从页面上它说它应该返回一个 XPathException 但是当我尝试一个 catch(e if e = "XPathException") 它没有捕获它。因为抛出的是一个 synthaxException。不确定我是否遗漏了一些东西,但我猜这是另一个问题......
    • @TheBakker 这不是catch 的正确语法。
    猜你喜欢
    • 2013-03-18
    • 2014-09-03
    • 2018-10-13
    • 2014-08-26
    • 2015-01-21
    • 2017-12-11
    • 2014-04-15
    • 2015-06-14
    • 1970-01-01
    相关资源
    最近更新 更多