10.9.4 단순화된 Xml 접근(Simplified Xml access)

10.9.4 단순화된 Xml 접근(Simplified Xml access)

haxe.xml.Access API는 가장 일반적인 Xml 메서드에 점 구문 접근을 제공하기 위해 존재합니다.

Haxe 4부터 이 클래스는 haxe.xml.Access로 이름지어졌습니다. Haxe 3에서는 haxe.xml.Fast로 알려져 있었습니다.

XML Access 사용 예:

// 일부 XML 데이터 파싱
var xml = Xml.parse("
<phonebook>
   <phone name="John">
      0000
      111
   </phone>
</phonebook>");
// Access를 위해 Xml 감싸기
var access = new haxe.xml.Access(xml.firstElement());

// 속성 접근
trace(access.att.name); // 속성 "name"
if (access.has.age) trace( access.att.age ); // 선택적 속성

// "phone" 자식 접근, 이것도 haxe.xml.Access로 감싸짐
var phone = access.node.phone;

// 숫자들 반복
for (p in phone.nodes.number) {
  trace(p.innerData);
}

이 코드는 모든 플랫폼에서 동일하게 작동합니다.

접근자(Accessors)

Access API와 함께 사용할 수 있는 다양한 접근자가 있습니다:

  • .name 현재 요소의 이름을 반환합니다(Xml.nodeName과 동일).
  • .x 현재 대응하는 Xml 노드를 반환합니다.
  • .att.<name> 주어진 속성에 접근합니다. 속성이 존재하지 않으면 예외가 발생합니다.
  • .has.<name> 속성의 존재를 확인합니다.
  • .elements 모든 하위 요소의 목록(Xml.Element 타입의 노드).
  • .node.<name> 주어진 이름을 가진 첫 번째 하위 요소에 접근합니다. 요소가 존재하지 않으면 예외가 발생합니다.
  • .nodes.<name> 주어진 이름을 가진 요소들의 List를 반환합니다.
  • .hasNode.<name> 주어진 이름을 가진 하위 노드의 존재를 확인합니다.
  • .innerData 노드의 내부 PCDATA 또는 CDATA를 반환합니다. 데이터가 없거나 데이터만 있지 않고 다른 노드도 있으면 예외가 발생합니다.
  • .innerHTML 현재 것을 제외한 모든 하위 노드로 만든 XML 문자열을 반환합니다.
자체 닫힌 노드(Self-closed nodes)

자체 닫힌 노드는 "일반" 노드처럼 접근할 수 없다는 점에 유의하세요. 예를 들어 다음 XML이 주어지면:

var xml = Xml.parse("<root><myNode1>some data</myNode1><myNode2 /></root>");

var access = new haxe.xml.Access(xml.firstElement());

var myNode1Value = access.node.myNode1.innerData;
// 문제 없음

var myNode2Value = access.node.myNode2.innerData;
// 오류, 예외가 발생함!

XML에 자체 닫힌 노드가 있을 수 있다면, 기본값이 있는 대안으로 폴백하기 전에 hasNode.innerData를 확인하세요.

var myNode2Value = access.node.myNode2.hasNode.innerData ? access.node.myNode2.innerData : null;

출처: Simplified Xml access

더 알아보기