如何在Emacs nxml-mode中搜索匹配XPath表达式的元素?

7
有没有一种方式在Emacs中交互式搜索与给定xpath表达式匹配的节点呢?我想要类似于re-forward-search的功能,但是不是使用正则表达式,而是输入一个xpath表达式。

我也是!如果我有时间,我会尝试查看是否有任何用于选择XPath匹配的nxml代码。如果存在这样的代码,那么我将编写一个Icicles搜索 多命令,用于搜索这些区域。 - Drew
@Drew在nxml代码中搜索xpath没有结果。有一个xpath.el实现,但我还没有时间测试它。它需要dom.el才能工作。 - manu
没错,这正是我上次在Emacs中寻找XPath和XQuery支持时发现的情况。太糟糕了。实现这些东西的良好支持无疑是非常困难的,但我认为它可能非常有用。即使需要DOM,也是如此。也许它存在(我看到了同样的参考资料),但我也没有时间真正去查看它。 - Drew
dom.el + xpath.el就可以做到。现在我能做的就是向nxml开发人员请求。也许在接下来的假期里,我可以设法有一些有效的东西,但这是不确定的... - manu
听起来不错。应该会很有用。 - Drew
2个回答

0

关于XPath查询,我没有答案,抱歉。但您可以尝试使用Icicles搜索搜索键M-s M-s xM-s M-s X(命令icicle-search-xml-elementicicle-search-xml-element-text-node)。

这些命令允许您搜索与您提供的正则表达式匹配的顶级XML元素的内容和text()节点。

对于icicle-search-xml-element,可以采用以下任何形式:

  • <ELEMENTNAME>...</ELEMENTNAME>
  • <ELEMENTNAME ATTRIBUTE1="..."...>...</ELEMENTNAME>
  • <ELEMENTNAME/>
  • <ELEMENTNAME ATTRIBUTE1="...".../>
你也可以选择搜索非上下文的缓冲文本,而不是由元素名称正则表达式定义的搜索上下文。要做到这一点,在完成期间使用`C-M-〜'。 (这是一个切换,并且仅影响将来的搜索命令,而不是当前的搜索命令。)
对于`icicle-search-xml-element-text-node`,顶级匹配元素不能具有属性。 只匹配形式为` ... `的顶级元素。
希望能帮到你。

1
我正在对一个长的XPath表达式进行XML测试。所以这是无法避免的。我必须测试这个XPath,以便将其放入我的代码中。具体来说,我正在编写一个OpenERP视图扩展(通过XML完成),他们提供的匹配要更改的位置的方法是通过XPath。因此,测试我的表达式是我需要的。 - manu
我明白。XPath(和XQuery)匹配确实没有替代品。(当然不是正则表达式。) - Drew

0

我很久以前也做过类似的事情。我现在无法提供任何详细信息,但我会概述一下我的方法。

我创建了一些 Emacs 函数来与本地 XML 数据库进行交互。我曾经使用 MarkLogic 服务器和 Berkley DB XML 数据库两次完成这项工作。其中一个函数仅仅是查询数据库。另一个函数将发送包括 Emacs 缓冲区或缓冲区选择的 XQuery 查询。

本地 XML 数据库服务器将处理查询并返回结果,而我的 Emacs 函数将在一个 result 缓冲区中呈现结果。

这种方法使我能够使用 XPath 和 XQuery 进行查询,这是一种更强大的查询语言,包括 XPath。(我很久以前写过关于 XQuery 的文章,在这里阅读:https://www.ibm.com/developerworks/library/x-xqueryxpath/

尽管所有这些听起来都很困难,但它的实际操作却非常容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接