ぽざうねっと

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  420  : 記事  0  : コメント  9425  : トラックバック  76

ニュース

さて、今年は何を漬けようか

書庫

日記カテゴリ

Accessory

Community

Private

http://blogs.wankuma.com/pinzolo/archive/2007/11/09/107109.aspx
リクエストいただきましたので、EmEditor 上で XML を整形するマクロです。
要するに、機械が吐き出す読みづらい XML に改行とインデントを追加します。
自分用なので、あまりキッチリ作ってませんが・・・
 1  /*
 2   * XML をフォーマットします。
 3   */
 4  // フォーマット後の文字列バッファ
 5  var _buff = "";
 6
 7  // インデント階層
 8  var _indentLevel = 0;
 9
10  // テキストノードが追加されたかどうか
11  var _isTextAppend = false;
12
13  // インデントに使用する文字列
14  var _indent = "\t"
15
16  // 改行文字
17  var _newLine = "\r\n";
18
19  // 内部使用関数宣言
20  /*
21   * 指定のノードの XML をフォーマットしてバッファに追加します。
22   */
23  function formatNode(node) {
24      if (node.nodeType == 1) { // ELEMENT ノード
25          _buff += _newLine;
26          // インデントを追加
27          for (var ti = 0; ti < _indentLevel; ti++) {
28              _buff += _indent;
29          }
30          // 開始タグを追加
31          _buff += node.xml.substring(0, node.xml.indexOf(">") + 1);
32          _isTextAppend = false;
33
34          // 子ノードがあれば、全子ノードに対して再起処理を行う
35          if (node.childNodes.length > 0) {
36              // インデントレベルをインクリメント
37              _indentLevel++;
38              for (var ci = 0; ci < node.childNodes.length; ci++) {
39                  // 各子要素について再起処理
40                  formatNode(node.childNodes.item(ci));
41              }
42              // インデントレベルをデクリメント
43              _indentLevel--;
44
45              // テキストノードの直後は改行もインデントも追加しない
46              if (! _isTextAppend) {
47                  _buff += _newLine;
48                  for (var ti = 0; ti < _indentLevel; ti++) {
49                      _buff += _indent;
50                  }
51              }
52
53              // 終了タグ
54              _buff += "</" + node.nodeName + ">";
55              _isTextAppend = false;
56          } else if (! _buff.substring(0, _buff.length - 2) == "/>") {
57              // 終了タグのある空要素の場合
58              _buff += "</" + node.nodeName + ">";
59              _isTextAppend = false;
60          }
61      } else if (node.nodeType == 3) { // TEXT ノード
62          // テキストノードはそのまま追加
63          _buff += node.nodeValue;
64          _isTextAppend = true;
65      } else {
66          // その他のノードはインデントしてそのまま追加
67          _buff += _newLine;
68          // タブを追加
69          for (var i = 0; i < _indentLevel; i++) {
70              _buff += _indent;
71          }
72          _buff += node.xml;
73          _isTextAppend = false;
74      }
75  }
76
77  var xdoc = new ActiveXObject("Microsoft.XMLDOM");
78  // XPath が使用できるように
79  xdoc.setProperty("SelectionLanguage", "XPath");
80  xdoc.async = false;
81
82  var activeDoc = editor.activeDocument;
83  activeDoc.selection.selectAll();
84  var xmlText = activeDoc.selection.text;
85
86  try {
87      xdoc.loadXML(xmlText);
88  } catch (e) {
89      alert(e.description);
90  }
91
92  var root = xdoc.documentElement;
93  // XML 宣言などルート要素以前の要素を追加
94  _buff += xmlText.substring(0, xmlText.indexOf("<" + root.nodeName));
95
96  // フォーマット後の XML を作成
97  formatNode(root);
98  activeDoc.selection.text = _buff;
投稿日時 : 2007年11月10日 7:12

コメント

# re: XML を整形するマクロ in EmEditor 2007/11/10 13:24 EmEditorユーザー
すばらしいです!EmEditorマクロがカテゴリでまとまっていると嬉しいです…

# re: XML を整形するマクロ in EmEditor 2007/11/13 0:39 THREE-ONE
もうちっと公開したら考えてみます。

# re: XML を整形するマクロ in EmEditor 2008/02/05 16:35 XMLProgrammer
すばらしい.
試用してみます.

# re: XML を整形するマクロ in EmEditor 2008/04/02 16:12 EmEditorユーザー
これは便利ですね!
助かります。

# re: VB.NET で C# の { } 空ブロックと同じことをするには? 2018/01/04 14:04 chenlina
http://www.michaelkorsinc.us.com
http://www.adidaswings.name
http://www.outletcanadagoosesale.us.com
http://www.louboutin.uk
http://www.timberland.us.org
http://www.ferragamooutlet.us.com
http://www.nikeairmax.me.uk
http://www.swarovski-jewelry.us
http://www.ralphlaurencom.us.com
http://www.pradabags.in.net
http://www.christian--louboutin.us
http://www.cheapreplicawatches.us.com
http://www.rayban.in.net
http://www.thenorthfaceoutlet.ca
http://www.oakleysunglassescom.us.com
http://www.uggbootssaleoutlet.us.com
http://www.michaelkorsoutlet.us
http://www.pandoracharmjewelry.us.com
http://www.montblanc.com.co
http://www.thenorthfaceuk.co.uk
http://www.truereligionsale.com.co
http://www.doudounecanadagooseenfant.fr
http://www.michaelkorsoutlet70off.us.com
http://www.ugg.com.co
http://www.michaelkorsonline-outlet.us.com
http://www.raybansunglassesoutlet.net.co
http://www.timberlandoutlet.us.org
http://www.converseshoesoutlet.us.com
http://www.ralphlauren-poloshirts.co.uk
http://www.uggcanadaoutlet.ca
http://www.toryburchoutletoff.us.com
http://www.uggoutletinc.us.com
http://www.truereligionoutletjeans.us
http://www.ralphlaurenoutletofficial.us.com
http://www.truereligion-jeans.us
http://www.wholesaleoakleysunglasses.us.org
http://www.fitflops.org
http://www.soccerjersey.us.com
http://www.pandorajewelrycanada.ca
http://www.coachhandbagsfactoryoutletonline.us.com
http://www.outletcanadagoose.ca
http://www.vibram-fivefingers.us.com
http://www.ralphlauren.in.net
http://www.ugg-bootsonline.us.com
http://www.canadagoosecom.us.com
http://www.adidasyeezy-boost.us.com
http://www.uggsclassicboots.us.com
http://www.newcoachoutlet.us.com
http://www.montblancpensonline.us.com
http://www.airjordanretro.fr
http://www.michael-korstaschen.ch
http://www.pradaoutletonlinestore.us.com
http://www.beatsheadphones.us.com
http://www.michaeljordan-shoes.com
http://www.discountnike.us.com
chenlina20180104

Post Feedback

タイトル
名前
Url:
コメント: