2014-12-16 17 views
6

Có cách nào tương tác tìm kiếm các nút khớp với biểu thức xpath đã cho trong các emac không?Cách tìm kiếm các phần tử khớp với biểu thức xpath trong chế độ emxs nxml?

Tôi muốn một cái gì đó tương tự như re-forward-search nhưng thay vì sử dụng cụm từ thông dụng, tôi sẽ nhập biểu thức xpath.

+0

Tôi cũng vậy! Nếu tôi có thời gian, tôi sẽ cố gắng xem mã nxml, nếu có, có để chọn các kết quả XPath. Nếu mã như vậy tồn tại thì tôi sẽ mã hóa một [** Icicles ** search] (http: //www.emacswiki.org/emacs/Icicles _-_ Search_Commands% 2c_Overview) [multi-command] (http://www.emacswiki.org/Icicles_-_Multi-Commands/) để tìm kiếm các vùng như vậy. – Drew

+0

@Drew greping cho xpath trong mã nxml không cho kết quả. Có một [xpath.el implementation] (http://www.emacswiki.org/emacs/xpath.el) nhưng tôi chưa có thời gian để kiểm tra nó. Nó yêu cầu dom.el hoạt động. – manu

+0

Đúng, đó là chính xác những gì tôi tìm thấy khi tôi tìm kiếm hỗ trợ XPath và XQuery trong Emacs lần cuối. Quá tệ. Việc thực hiện hỗ trợ tốt cho những điều như vậy sẽ không nghi ngờ gì là không tầm thường, nhưng nó có thể thực sự hữu ích, IMO. (Ngay cả khi nó đòi hỏi một DOM.) Và có lẽ nó tồn tại (tôi thấy cùng một tài liệu tham khảo), nhưng tôi cũng không có thời gian để thực sự kiểm tra xem nó ra. – Drew

Trả lời

0

Tôi không có câu trả lời cho các truy vấn XPath; lấy làm tiếc. Nhưng bạn có thể thử các phím tìm kiếm Icicles searchM-s M-s xM-s M-s X (lệnh icicle-search-xml-elementicicle-search-xml-element-text-node).

Những điều này cho phép bạn tìm kiếm nội dung và các nút tương ứng của các phần tử XML cấp cao nhất có các tên phù hợp với regexp mà bạn cung cấp.

Đối icicle-search-xml-element, có thể có bất kỳ những hình thức:

  • <ELEMENTNAME>...</ELEMENTNAME>
  • <ELEMENTNAME ATTRIBUTE1="..."...>...</ELEMENTNAME>
  • <ELEMENTNAME/>
  • <ELEMENTNAME ATTRIBUTE1="...".../>

Hoặc bạn có thể chọn để tìm kiếm, không phải là tìm kiếm các ngữ cảnh là được xác định bằng regexp tên phần tử, nhưng không phải ngữ cảnh, có nghĩa là, văn bản đệm nằm ngoài các phần tử như vậy. Để làm điều này, sử dụng `C-M- ~ ' trong khi hoàn thành. (Đây là nút chuyển và chỉ ảnh hưởng đến các lệnh tìm kiếm trong tương lai tương lai, không ảnh hưởng đến lệnh hiện tại.)

Đối với icicle-search-xml-element-text-node, các yếu tố kết hợp cấp cao nhất không được có thuộc tính. Chỉ các thành phần cấp cao nhất của biểu mẫu <ELEMENTNAME>...</ELEMENTNAME> mới là phù hợp.

HTH.

+1

Tôi thực sự đang thử nghiệm một biểu thức xpath dài đối với một XML. Vì vậy, không có cách nào xung quanh nó. Tôi phải kiểm tra xpath này để tôi có thể đặt nó trong mã của tôi. Cụ thể là tôi đang viết một phần mở rộng cho một khung nhìn OpenERP (được thực hiện thông qua XML) và cách chúng cung cấp cho phù hợp với những nơi bạn muốn thay đổi là thông qua Xpath. Vì vậy, kiểm tra biểu thức của tôi là những gì tôi cần. – manu

+0

Tôi hiểu. Có thực sự không thay thế cho XPath (và XQuery) phù hợp. (Chắc chắn không phải regexps.) – Drew

0

Tôi đã làm điều tương tự như vậy từ lâu rồi. Tôi không thể cung cấp cho bạn bất kỳ chi tiết nào ngay bây giờ, nhưng tôi sẽ cung cấp tổng quan về phương pháp tôi đã thực hiện.

Tôi đã tạo một số hàm Emacs để tương tác với (truy vấn) cơ sở dữ liệu XML nguyên gốc. Tôi đã làm nó với một máy chủ Mark Logic một lần và với một cơ sở dữ liệu Berkley DB XML một lần nữa. Một trong những hàm đó đơn giản truy vấn cơ sở dữ liệu. Một hàm khác sẽ gửi một truy vấn XQuery bao gồm bộ đệm Emacs hoặc vùng đệm.

Máy chủ cơ sở dữ liệu XML gốc sẽ xử lý truy vấn, trả về kết quả và hàm Emacs của tôi sẽ hiển thị kết quả trong bộ đệm .

Cách tiếp cận này cho phép tôi truy vấn XML bằng XPath và XQuery, một ngôn ngữ truy vấn mạnh hơn bao gồm XPath. (Tôi đã viết về XQuery một thời gian dài trước đây, ở đây: https://www.ibm.com/developerworks/library/x-xqueryxpath/)

Khó khăn như tất cả điều này có thể âm thanh, nó hóa ra là đáng ngạc nhiên dễ dàng.

Các vấn đề liên quan