如何在emacs nxml-mode中搜索与xpath表达式匹配的元素?

时间:2014-12-16 22:24:31

标签: xpath emacs

有没有办法以交互方式搜索与emacs中给定xpath表达式匹配的节点?

我想要类似re-forward-search的内容,但不是使用正则表达式,而是键入xpath表达式。

2 个答案:

答案 0 :(得分:0)

我没有得到XPath查询的答案;抱歉。但您可以尝试Icicles search搜索键 M-s M-s x M-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="...".../>

您也可以选择搜索,而不是搜索上下文 由element-name regexp定义,但是非上下文,即 缓冲文本在这些元素之外。为此,请使用`C-M-〜&#39; 在完成期间。 (这是一个切换,它只影响未来 搜索命令,而不是当前命令。)

对于icicle-search-xml-element-text-node,顶级匹配元素不得包含属性。只有<ELEMENTNAME>...</ELEMENTNAME>形式的顶级元素 匹配。

HTH。

答案 1 :(得分:0)

很久以前我做过类似的事。我现在无法向您提供任何详细信息,但我会概述我采用的方法。

我创建了一些Emacs函数来与原生XML数据库进行交互(查询)。我用MarkLogic服务器做过一次,用Berkley DB XML数据库做了一次。其中一个函数只是查询数据库。另一个函数将发送包含Emacs缓冲区或缓冲区选择的XQuery查询。

原生XML数据库服务器将处理查询,返回结果,我的Emacs函数将结果呈现在结果缓冲区中。

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

尽管所有这些听起来都很困难,但结果却非常简单。