2011.09.30 17:52
텍스트 편집기인 Sublime Text2 에서 XML formatting 기능을 적용하는 방법을 알아본다.

1. XML 포멧팅 기능을 제공하는 Tidy 를 다운로드한다.


2. 다운로드한 tidy.exe 를 Path가 걸려있는 경로에 위치시킨다.
   (예: c:\windows\system32 )

3. 단축키를 바인딩한다. (Menu : Preferences > Key Bindings - User)

Default(Windows).sublime-keymap

[

// Formatting short key

{ "keys": ["ctrl+shift+x"], "command": "tidy_xml" }

]


4. tidy_xml 플러그인 스크립트 파일을 작성하여 Packages의 User 폴더에 위치시킨다.
  Sublime Text 2 Packages 폴더로 쉽게 이동하려면 Menu에서 Preferences > Browse Packages 를 클릭하면 된다.
  (예 : C:\Documents and Settings\Standard\Application Data\Sublime Text 2\Packages\User)

tidy_xml.py

import sublime, sublime_plugin, subprocess


class TidyXmlCommand(sublime_plugin.TextCommand):

  def run(self, edit):

    command = 'tidy -xml -i -utf8 -wrap 400 -q'


    # help from http://www.sublimetext.com/forum/viewtopic.php?f=2&p=12451

    p = subprocess.Popen(command, bufsize=-1, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)

    result, err = p.communicate(self.view.substr(self.view.sel()[0]).encode('utf-8'))


    self.view.replace(edit, self.view.sel()[0], result.decode('utf-8'))


4. Sublime Text 2 에디터를 재구동한다.
5. XML 파일을 열고 전체선택한 뒤 단축키(ctrl+shift+x)로 포멧팅을 수행한다.

6. 참고 URL
   https://gist.github.com/1138554
   http://lab.artlung.com/ancient-tidy-tutorial/

Posted by kimgisa.net
2006.12.13 21:59

14.4 DOM과 SAX의 개념적인 차이

DOM SAX 이해하기 전에 여러분이 반드시 숙지하셔야 하는 것은 XML 트리(Tree)형태로 되어 있다 것입니다. 구조 , DTD 이용하여 만든 XML 문서는 트리형태로 데이터가 구축됩니다. XML 문서를 검색하거나 프로그램적으로 핸들하고자 트리형태의 구조를 감안하지 않을 없습니다.

XML 문서는 Tree 구조다.

XML 문서는 트리형태로 데이터가 구축됩니다. 예를 들어, 다음과 같이 간단한 XML 데이터가 있다고 가정하죠.

간단한 XML 데이터

<bookstore>
<book>
   <title>소설C#</title>
   <author>홍길동</author>
   <price>2000</price>
</book>
<book>
   <title>소설C++</title>
   <author>김삿갓</author>
   <price>3000</price>
</book>
<bookstore>

14-1 간단한 XML 데이터

데이터를 핸들하고자 한다면 일단 메모리로 로딩되어져야 합니다. 메모리로 로딩할 우리는 두가지 경우를 생각해 있습니다. 트리(Tree) 형태 순차적 스트림(Sequential Stream) 형태 그것입니다. 사실, 위의 데이터를 읽어들이는 자체가 바로 순차적이지만 일단은 두가지 방식이 있다고 가정하겠습니다.

Tree 구조의 메모리적인 핸들

이러한 두가지의 메모리 형태의 데이터는 다음과 같이 표현할 있을 것입니다.

그림 14-2 트리형태와 순차적 스트림형태

위의 두가지 방식에서 book 접근하려 합니다. 어떠한 방식으로 접근할까요? 트리형태 경우 bookstore 하위노드 두개가 book이기 때문에 bookstore 하위의 노드만 찾으면 됩니다. 순차적 스트림형태 경우 차례대로 읽어 가면서 book 만날 때마다 작업을 하면 것입니다. 아주 간단한 원리입니다. 이러한 원리는 메모리 형태로 데이터를 어떻게 보유하느냐의 차이에서 차이점을 찾을 있습니다. Tree 형태로 보유하느냐 순차적(Sequential)으로 보유하느냐의 차이입니다.

데이터의 저장형태

일반적인 데이터가 저장될 때에는 모두 순차적 데이터형태로 저장이 됩니다. 보통의 경우 시퀀셜(Sequential)하다는 용어를 사용합니다. 자료구조 트리(Tree)  그래프(Graph) 형태의 데이터라 할지라도 물리적인 장소에 저장될 때에 반드시 순차적으로 저장될 수밖에 없습니다. 그리고, 메모리에 로드되어 사용될 때에는 개념적인 자료구조가 사용되는 것입니다.

XML 데이터의 경우에도 데이터를 직접 읽어들이면 바로 순차적인 스트림이 되는 것입니다. 하지만, 메모리에 로딩되어 트리형태로 관리될 있습니다.

메모리에 트리형태로 데이터를 보유하고 관리한다면 DOM(Document Object Model)  방식입니다. 그리고, 순차적인 스트림형태로 데이터를 관리하면 SAX(Simple API for Xml) 방식입니다. DOM 방식 경우 상위노드에서 하위노드를 검색하면서 데이터를 찾게 됩니다. 이것은 DOM 방식의 데이터가 트리구조로 되어 있기 때문에 가능한 것입니다. 반면에, SAX 방식 데이터를 순차적으로 읽어들이면서 원하는 데이터를 만나는 순간 이벤트가 발생하고 원하는 데이터의 이벤트를 처리방식으로 데이터를 검색합니다.

Posted by kimgisa.net
TAGdom, SAX, XML

티스토리 툴바