2019年7月20日土曜日

.net とXPathで遊ぶ

xml ファイルを読み込んで、
指定したXpathで取得したノードの
内部の情報を表示するだけのツール作ってみた。


using System.Xml;
using System.Xml.XPath;

public class TestXPath{
    public static void Main(string[] args){
        if(args.Length < 2){
            System.Console.WriteLine("usage: XPath hoge.xml /xpath");
        }
        else{

            XmlDocument doc = new XmlDocument();

            //XMLファイルのローディング
            doc.Load(args[0]);

            XPathNavigator navi;
            navi = doc.CreateNavigator();

            //XmlNodeList nodes = doc.SelectNodes(args[1]);
            //foreach(XmlNode node in nodes){
            //    System.Console.WriteLine(node.InnerXml);
            //}

            //XPath
            XPathNodeIterator xpIt = navi.Select(args[1]);
            while(xpIt.MoveNext()){
                System.Console.WriteLine(xpIt.Current.InnerXml);
            }
        }
    }
}
    

emacs 26.2のnxml

emacs でxmlを編集する時、
nxml-modeを昔から愛用してたのだけど、
emacsのどこかのヴァージョンで標準で搭載
されるようになったみたい。

で、標準になったのは、いいのだけど、
このモードで一番使用していた
補完機能のキーバインドが変わってしまっていた。

途方にくれて、調べていたら、
ここに書いてあった。

 C-M-i or <ESC> <TAB> or M-x completion-at-point

らしい。

上の方法を使ってもよいのだけど、
今までの補完方法 C-returnにするため、

下記を.emacsに追加

(defun my-nxml-mode-init()
  (local-set-key (kbd "<C-return>") 'completion-at-point)
  )


(add-hook 'nxml-mode-hook 'my-nxml-mode-init)


すっきりした。