有没有办法以交互方式搜索与emacs中给定xpath表达式匹配的节点?
我想要类似re-forward-search
的内容,但不是使用正则表达式,而是键入xpath表达式。
答案 0 :(得分:0)
我没有得到XPath查询的答案;抱歉。但您可以尝试Icicles search搜索键 M-s M-s x
和 M-s M-s X
(命令icicle-search-xml-element
和icicle-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/)
尽管所有这些听起来都很困难,但结果却非常简单。