xml.dom — 문서 객체 모델 API¶
소스 코드: Lib/xml/dom/__init__.py
문서 객체 모델(Document Object Model), 또는 “DOM”은 XML 문서를 액세스하고 수정하기 위한 W3C(World Wide Web Consortium)의 교차 언어 API입니다. DOM 구현은 XML 문서를 트리 구조로 나타내거나, 클라이언트 코드가 이러한 구조를 처음부터 구축 할 수 있도록 합니다. 그런 다음 잘 알려진 인터페이스를 제공하는 객체 집합을 통해 구조에 액세스 할 수 있습니다.
DOM은 무작위 액세스 응용 프로그램에 매우 유용합니다. SAX에서는 한 번에 한 조각의 문서만 볼 수 있습니다. 하나의 SAX 요소를 보고 있는 동안, 다른 SAX 요소에 액세스할 수 없습니다. 텍스트 노드를 보고 있으면, 이것을 포함하는 요소에 액세스할 수 없습니다. SAX 응용 프로그램을 작성할 때는, 문서에서의 프로그램의 위치를 자신의 코드 어딘가에서 추적해야 합니다. SAX는 여러분을 위해 대신해주지 않습니다. 또한, XML 문서를 미리 보아야 한다면, 운이 다했다고 보아야 합니다.
트리에 액세스할 수 없는 이벤트 중심 모델에서는 일부 응용 프로그램이 불가능합니다. 물론 SAX 이벤트에서 트리를 직접 만들 수는 있지만, DOM을 사용하면 그런 코드를 작성하지 않아도 됩니다. DOM은 XML 데이터의 표준 트리 표현입니다.
문서 객체 모델은 W3C에 의해 단계적으로 또는 그들의 용어로는 “수준”으로 정의됩니다. API의 파이썬 매핑은 실질적으로 DOM 수준 2 권장 사항을 기반으로 합니다.
DOM 응용 프로그램은 일반적으로 일부 XML을 DOM으로 구문 분석하는 것으로 시작합니다. 이것을 달성하는 방법은 DOM 수준 1은 전혀 다루지 않으며, 수준 2는 제한된 개선만을 제공합니다: Document 생성 메서드에 대한 액세스를 제공하는 DOMImplementation 객체 클래스가 있습니다만, 구현에 독립적인 방법으로 XML 판독기(reader)/기록기(writer)/Document 구축기(builder)를 액세스하는 방법이 없습니다. 기존 Document 객체 없이 이러한 메서드에 액세스할 수 있는 잘 정의된 방법도 없습니다. 파이썬에서, 각 DOM 구현은 getDOMImplementation() 함수를 제공합니다. DOM 수준 3은 판독기(reader)에 대한 인터페이스를 정의하는 로드/저장 명세를 추가하지만, 아직 파이썬 표준 라이브러리에서는 사용할 수 없습니다.
일단 DOM 문서 객체가 있으면, 프로퍼티와 메서드를 통해 XML 문서의 일부에 액세스 할 수 있습니다. 이러한 프로퍼티는 DOM 명세에 정의되어 있습니다; 레퍼런스 설명서의 이 부분은 파이썬이 명세를 해석하는 방법을 설명합니다.
W3C에서 제공하는 명세는 Java, ECMAScript 및 OMG IDL 용 DOM API를 정의합니다. 여기에 정의된 파이썬 매핑은 대부분 명세의 IDL 버전을 기반으로 하지만, 엄격한 준수는 필요하지 않습니다 (구현은 IDL의 엄격한 매핑을 자유롭게 지원할 수 있습니다). 매핑 요구 사항에 대한 자세한 내용은 규격 준수 절을 참조하십시오.
더 보기
- Document Object Model (DOM) Level 2 Specification
파이썬 DOM API의 기반이 되는 W3C 권장 사항.
- Document Object Model (DOM) Level 1 Specification
xml.dom.minidom이 지원하는 DOM에 대한 W3C 권장 사항.- Python Language Mapping Specification
OMG IDL에서 파이썬으로의 매핑을 지정합니다.
모듈 내용¶
xml.dom 은 다음 함수를 포함합니다:
- xml.dom.registerDOMImplementation(name, factory)¶
factory 함수를 name이라는 이름으로 등록합니다. 팩토리(factory) 함수는
DOMImplementation인터페이스를 구현하는 객체를 반환해야 합니다. 팩토리 함수는 호출 때마다 같은 객체를 반환하거나 특정 구현에 적합하다면 새 객체를 반환할 수 있습니다 (예를 들어, 해당 구현이 일부 사용자 정의를 지원하는 경우).
- xml.dom.getDOMImplementation(name=None, features=())¶
적절한 DOM 구현을 반환합니다. name 은 잘 알려진 이름이거나, DOM 구현의 모듈 이름 또는
None입니다.None이 아니면 해당 모듈을 임포트하고, 임포트에 성공하면DOMImplementation객체를 반환합니다. 이름이 지정되지 않고 환경 변수PYTHON_DOM이 설정된 경우, 이 변수를 사용하여 구현을 찾습니다. 표준 라이브러리에서 유일하게 잘 알려진 이름은xml.dom.minidom을 위한'minidom'입니다.이름이 제공되지 않으면, 사용 가능한 구현들을 검사하여 필요한 기능 세트를 가진 것을 찾습니다. 적절한 구현을 찾을 수 없으면
ImportError를 발생시킵니다. 기능 목록은 사용 가능한DOMImplementation객체의hasFeature()메서드에 전달되는(feature, version)쌍의 시퀀스여야 합니다.
몇 가지 편의 상수도 제공됩니다:
- xml.dom.EMPTY_NAMESPACE¶
DOM 내의 노드에 이름 공간이 연결되어 있지 않음을 나타내는 데 사용되는 값입니다. 이 값은 일반적으로 노드의
namespaceURI로 나타나거나, 이름 공간 전용 메서드의 namespaceURI 매개변수로 사용됩니다.
- xml.dom.XML_NAMESPACE¶
예약된 접두어
xml과 연관된 이름 공간 URI, Namespaces in XML에서 정의됩니다 (4절).
- xml.dom.XMLNS_NAMESPACE¶
이름 공간 선언의 이름 공간 URI, Document Object Model (DOM) Level 2 Core Specification에서 정의됩니다 (1.1.8 절).
- xml.dom.XHTML_NAMESPACE¶
XHTML 이름 공간의 URI, XHTML 1.0: The Extensible HyperText Markup Language에서 정의됩니다 (3.1.1 절).
또한, xml.dom 은 기본 Node 클래스와 DOM 예외 클래스들을 포함합니다. 이 모듈이 제공하는 Node 클래스는 DOM 명세에 정의된 메서드나 어트리뷰트를 구현하지 않으며, 구체적인 DOM 구현이 이를 제공해야 합니다. 이 모듈의 일부로 제공되는 Node 클래스는 구체적인 Node 객체의 nodeType 어트리뷰트에 사용되는 상수를 제공하며, 이들은 DOM 명세를 준수하기 위해 모듈 수준이 아닌 클래스 내에 위치합니다.
DOM의 객체¶
DOM에 대한 결정적인 문서는 W3C의 DOM 명세입니다.
이 섹션에 기술된 이름들은 DOM 인터페이스입니다. Node 및 예외 클래스를 제외하고, 이들은 xml.dom 모듈 자체가 제공하는 것이 아니라 xml.dom.minidom 과 같은 구체적인 DOM 구현체에 의해 제공됩니다.
DOM 어트리뷰트는 간단한 문자열 대신 노드로 조작될 수도 있음에 유의하십시오. 하지만 그렇게 해야만 하는 경우는 매우 드물어서, 이 사용법은 아직 문서화되지 않았습니다.
인터페이스 |
절 |
목적 |
|---|---|---|
하부 구현에 대한 인터페이스. |
||
문서에 있는 대부분 객체에 대한 베이스 인터페이스. |
||
노드의 시퀀스를 위한 인터페이스. |
||
문서를 처리하는 데 필요한 선언에 대한 정보. |
||
전체 문서를 나타내는 객체. |
||
문서 계층의 엘리먼트 노드. |
||
엘리먼트 노드의 어트리뷰트 값 노드 |
||
소스 문서에 있는 주석의 표현. |
||
문서의 텍스트 내용을 포함하는 노드. |
||
처리 명령어 표현. |
추가 절에서 파이썬에서 DOM 작업을 위해 정의된 예외에 관해 설명합니다.
DOMImplementation 객체¶
DOMImplementation 인터페이스는 응용 프로그램이 사용 중인 DOM에서 특정 기능의 가용성을 판별할 방법을 제공합니다. DOM 수준 2는 DOMImplementation을 사용하여 새로운 Document와 DocumentType 객체를 만드는 기능을 추가했습니다.
- DOMImplementation.hasFeature(feature, version)¶
문자열 feature와 version 쌍으로 식별되는 기능이 구현되었으면
True를 반환합니다.
- DOMImplementation.createDocument(namespaceUri, qualifiedName, doctype)¶
지정된 namespaceUri와 qualifiedName을 가진 자식
Element객체를 포함하는 새Document객체(DOM의 루트)를 반환합니다. doctype은createDocumentType()으로 만든DocumentType객체거나None이어야 합니다. 파이썬 DOM API에서,Element자식이 만들어지지 않음을 표시하기 위해 처음 두 인자는None일 수 있습니다.
- DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)¶
XML 문서 형 선언에 포함된 정보를 나타내는, 지정된 qualifiedName, publicId 및 systemId 문자열을 캡슐화하는 새
DocumentType객체를 반환합니다.이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
Node 객체¶
XML 문서의 모든 구성 요소는 Node의 서브 클래스입니다.
다음 유형의 노드만 자식을 가질 수 있으며, 자식 또한 명시된 유형에 한합니다:
Document최대 하나의
Element, 최대 하나의DocumentType,ProcessingInstruction및CommentDocumentFragment및ElementElement,Text,CDATASection,ProcessingInstruction및CommentAttr
다른 유형의 노드는 자식을 가질 수 없습니다. 허용되지 않는 유형의 자식을 삽입하면 HierarchyRequestErr 가 발생합니다.
- Node.ELEMENT_NODE¶
- Node.ATTRIBUTE_NODE¶
- Node.TEXT_NODE¶
- Node.CDATA_SECTION_NODE¶
- Node.ENTITY_REFERENCE_NODE¶
- Node.ENTITY_NODE¶
- Node.PROCESSING_INSTRUCTION_NODE¶
- Node.COMMENT_NODE¶
- Node.DOCUMENT_NODE¶
- Node.DOCUMENT_TYPE_NODE¶
- Node.DOCUMENT_FRAGMENT_NODE¶
- Node.NOTATION_NODE¶
nodeType어트리뷰트의 가능한 값에 대한 정수 상수입니다.
- Node.parentNode¶
현재 노드의 부모, 또는 문서 노드의 경우
None. 값은 항상Node객체나None입니다.Element노드의 경우, 이것은 부모 엘리먼트가 되는데, 루트 엘리먼트는 예외로, 이때는Document객체가 됩니다.Attr노드의 경우, 항상None입니다. 이것은 읽기 전용 어트리뷰트입니다.
- Node.attributes¶
어트리뷰트 객체의
NamedNodeMap. 엘리먼트에만 실제 값이 있습니다; 다른 것은 이 어트리뷰트에서None을 제공합니다. 이것은 읽기 전용 어트리뷰트입니다.
- Node.previousSibling¶
같은 부모를 갖고 이 노드 바로 앞에 있는 노드. 예를 들어 self 엘리먼트의 시작 태그 바로 앞에 오는 종료 태그의 엘리먼트. 물론, XML 문서는 단순히 엘리먼트만으로 구성되지 않기 때문에, 이전 형제(previous sibling)는 텍스트, 주석 또는 뭔가 다른 것이 될 수 있습니다. 이 노드가 부모의 첫 번째 자식이면, 이 어트리뷰트는
None입니다. 이것은 읽기 전용 어트리뷰트입니다.
- Node.nextSibling¶
같은 부모를 갖고 이 노드 바로 뒤에 나오는 노드.
previousSibling도 참조하십시오. 이것이 부모의 마지막 자식이면, 이 어트리뷰트는None입니다. 이것은 읽기 전용 어트리뷰트입니다.
- Node.firstChild¶
노드의 첫 번째 자식 (있다면), 또는
None. 이것은 읽기 전용 어트리뷰트입니다.
- Node.lastChild¶
노드의 마지막 자식 (있다면), 또는
None. 이것은 읽기 전용 어트리뷰트입니다.
- Node.namespaceURI¶
엘리먼트 이름과 연관된 이름 공간. 이것은 문자열이나
None입니다. 이것은 읽기 전용 어트리뷰트입니다.
- Node.isSupported(feature, version)¶
DOMImplementation.hasFeature()와 마찬가지로, DOM 구현이 특정 feature 를 지원하는지 여부를 반환합니다.
- Node.setUserData(key, data, handler)¶
이 노드에 key 를 사용하여 data 를 연결하고, 이전에 key 와 연결되었던 데이터를 또는
None을 반환합니다. data 가None이면 연결이 제거됩니다. 노드가 복제, 가져오기, 이름 변경 또는 삭제될 때 handler 가 호출됩니다. 알림이 필요하지 않은 경우None을 전달하십시오.
- Node.getUserData(key)¶
setUserData()에 의해 이 노드의 key 와 연결된 데이터를 또는None을 반환합니다.
- Node.nodeName¶
노드의 유형에 따른 이 노드의 이름입니다. 아래 표를 참조하십시오. 엘리먼트의 경우
tagName프로퍼티, 어트리뷰트의 경우name프로퍼티와 같은 다른 프로퍼티에서 동일한 정보를 항상 얻을 수 있습니다. 이 어트리뷰트는 읽기 전용입니다.
- Node.nodeValue¶
노드 유형에 따른 이 노드의 값입니다. 아래 표를 참조하십시오. 값은 문자열 또는
None입니다.
각 노드 유형에 대한 nodeName 및 nodeValue 의 값은 다음과 같습니다.
노드 유형 |
nodeName |
nodeValue |
|---|---|---|
|
내용 |
|
|
내용 |
|
|
|
|
|
|
|
|
||
|
||
엔티티의 이름 |
|
|
표기법의 이름 |
|
|
|
내용 |
- Node.hasAttributes()¶
노드에 어트리뷰트가 있으면
True를 반환합니다.
- Node.hasChildNodes()¶
노드에 자식 노드가 있으면
True를 반환합니다.
- Node.isSameNode(other)¶
other가 이 노드와 같은 노드를 가리키면
True를 반환합니다. 이것은 모든 종류의 프락시 구조를 사용하는 DOM 구현에서 특히 유용합니다 (여러 객체가 같은 노드를 가리킬 수 있기 때문입니다).참고
이것은 여전히 “작업 초안” 단계에 있는 제안된 DOM 수준 3 API를 기반으로 하지만, 이 특정 인터페이스는 논란의 여지가 없는 것으로 보입니다. W3C의 변경 사항이 파이썬 DOM 인터페이스에서 이 메서드에 반드시 영향을 미치는 것은 아닙니다 (이를 위한 새 W3C API도 지원되기는 하겠지만).
- Node.appendChild(newChild)¶
자식 리스트의 끝에 이 노드의 새 자식 노드를 추가하고, newChild를 반환합니다. 노드가 이미 트리에 있으면, 먼저 제거됩니다.
newChild 가 다른 문서에 의해 생성된 경우
WrongDocumentErr를, 이 노드 자신이나 조상 노드인 경우HierarchyRequestErr를 발생시킵니다.
- Node.insertBefore(newChild, refChild)¶
기존 자식 노드 앞에 새 자식 노드를 삽입합니다. refChild 가 이 노드의 자식이어야 하며, 그렇지 않으면
NotFoundErr가 발생합니다. newChild 가 반환됩니다. refChild 가None인 경우, 자식 리스트의 끝에 newChild 를 삽입합니다.newChild 가 다른 문서에 의해 생성된 경우
WrongDocumentErr를, 이 노드 자신이나 조상 노드인 경우HierarchyRequestErr를 발생시킵니다.
- Node.removeChild(oldChild)¶
자식 노드를 제거합니다. oldChild 는 이 노드의 자식이어야 하며, 그렇지 않으면
NotFoundErr가 발생합니다. 성공 시 oldChild 가 반환됩니다. oldChild 를 더 이상 사용하지 않을 경우, 해당 노드의unlink()메서드를 호출해야 합니다.
- Node.replaceChild(newChild, oldChild)¶
기존 노드를 새 노드로 교체합니다. oldChild 가 이 노드의 자식이어야 하며, 그렇지 않으면
NotFoundErr가 발생합니다.newChild 가 다른 문서에 의해 생성된 경우
WrongDocumentErr를, 이 노드 자신이나 조상 노드인 경우HierarchyRequestErr를 발생시킵니다.
- Node.normalize()¶
모든 텍스트 스트레치(stretch)가 단일
Text인스턴스로 저장되도록, 인접한 텍스트 노드를 결합합니다. 이는 많은 응용 프로그램에서 DOM 트리의 텍스트 처리를 단순화합니다.
- Node.cloneNode(deep)¶
이 노드를 복제합니다. deep을 설정하면 모든 자식 노드도 복제됩니다. 복제를 반환합니다.
NodeList 객체¶
NodeList 는 노드 시퀀스를 나타냅니다. 이 객체는 DOM Core 권장 사항에서 두 가지 방식으로 사용됩니다. Element 객체는 자식 노드 리스트로 이를 제공하며, Node 의 getElementsByTagName() 및 getElementsByTagNameNS() 메서드는 쿼리 결과를 나타내기 위해 이 인터페이스를 가진 객체를 반환합니다.
DOM 수준 2 권장 사항은 이러한 객체에 대해 하나의 메서드와 하나의 어트리뷰트를 정의합니다:
- NodeList.item(i)¶
시퀀스에서 i 번째 항목을 반환하며, i 가 범위를 벗어나면
None을 반환합니다. 음수 인덱스는 지원되지 않습니다.
- NodeList.length¶
시퀀스의 노드 수.
또한, 파이썬 DOM 인터페이스는 NodeList 객체를 파이썬 시퀀스로 사용할 수 있도록 몇 가지 추가 지원을 요구합니다. 모든 NodeList 구현에는 __len__()과 __getitem__()에 대한 지원이 포함되어야 합니다; 이를 통해 for 문에서 NodeList를 이터레이트할 수 있고, len() 내장 함수를 적절히 지원할 수 있습니다.
DOM 구현이 문서 수정을 지원하면, NodeList 구현은 __setitem__()과 __delitem__() 메서드도 지원해야 합니다.
DocumentType 객체¶
Information about the notations and entities declared by a document (including
the external subset if the parser uses it and can provide the information) is
available from a DocumentType object. The DocumentType for a
document is available from the Document object’s doctype
attribute; if there is no DOCTYPE declaration for the document, the
document’s doctype attribute will be set to None instead of an
instance of this interface.
DocumentType은 Node의 특수화(specialization)이고 다음 어트리뷰트를 추가합니다:
- DocumentType.publicId¶
문서 형식 정의의 외부 부분 집합에 대한 공용 식별자입니다.
DOCTYPE선언에 명시되지 않은 경우None입니다.
- DocumentType.systemId¶
문서 형식 정의의 외부 부분 집합에 대한 시스템 식별자(URI)입니다.
DOCTYPE선언에 명시되지 않은 경우None입니다.
- DocumentType.internalSubset¶
문서에서 완전한 내부 부분 집합(internal subset)을 제공하는 문자열. 부분 집합을 묶는 대괄호는 포함되지 않습니다. 문서에 내부 부분 집합이 없으면
None이어야 합니다.
- DocumentType.name¶
DOCTYPE선언에 제공된 루트 엘리먼트의 이름 (있다면).
- DocumentType.entities¶
이는 외부 엔티티의 정의를 제공하는
Entity노드의NamedNodeMap입니다. 엔티티 이름이 두 번 이상 정의된 경우 첫 번째 정의만 제공됩니다(XML 권장 사항에 따라 나머지는 무시됨). 구문 분석기가 정보를 제공하지 않거나 정의된 엔티티가 없는 경우None일 수 있습니다.
- DocumentType.notations¶
이는 표기법의 정의를 제공하는
Notation노드의NamedNodeMap입니다. 표기법 이름이 두 번 이상 정의된 경우 첫 번째 정의만 제공됩니다(XML 권장 사항에 따라 나머지는 무시됨). 구문 분석기가 정보를 제공하지 않거나 정의된 표기법이 없는 경우None일 수 있습니다.
Document 객체¶
Document는 구성 엘리먼트, 어트리뷰트, 처리 명령어, 주석 등을 포함한 전체 XML 문서를 나타냅니다. Node의 프로퍼티를 상속한다는 점을 기억하십시오.
- Document.documentElement¶
문서의 유일한 루트 엘리먼트.
- Document.doctype¶
문서의
DocumentType노드 또는None. 이 어트리뷰트는 읽기 전용입니다.
- Document.implementation¶
이 문서를 생성한
DOMImplementation객체입니다. 이 어트리뷰트는 읽기 전용입니다.
- Document.strictErrorChecking¶
오류 검사가 강제되는지 여부입니다.
- Document.documentURI¶
문서의 위치이며, 알 수 없는 경우
None입니다.
- Document.createDocumentFragment()¶
비어 있는
DocumentFragment노드를 생성하여 반환합니다.
- Document.createCDATASection(data)¶
data 를 포함하는
CDATASection노드를 생성하여 반환합니다.
- Document.importNode(importedNode, deep)¶
이 문서에 속한 importedNode 의 복사본을 반환합니다. 원본 노드는 기존 문서에서 제거되지 않습니다. deep 이 true인 경우, 노드의 자손 노드들도 함께 복제됩니다.
- Document.createElement(tagName)¶
새 엘리먼트 노드를 생성하여 반환합니다. 엘리먼트는 생성될 때 문서에 삽입되지 않습니다.
insertBefore()또는appendChild()와 같은 다른 메서드 중 하나를 사용하여 명시적으로 삽입해야 합니다.이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
- Document.createElementNS(namespaceURI, tagName)¶
네임스페이스가 포함된 새 엘리먼트를 생성하여 반환합니다. tagName 은 접두사를 가질 수 있습니다. 엘리먼트는 생성될 때 문서에 삽입되지 않습니다.
insertBefore()또는appendChild()와 같은 다른 메서드 중 하나를 사용하여 명시적으로 삽입해야 합니다.이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
- Document.createTextNode(data)¶
매개 변수로 전달된 data를 포함하는 텍스트 노드를 만들고 반환합니다. 다른 생성 메서드와 마찬가지로 이 메서드는 노드를 트리에 삽입하지 않습니다.
- Document.createEntityReference(name)¶
새 엔터티 참조 노드를 생성하여 반환합니다. 노드는 생성될 때 문서에 삽입되지 않습니다.
이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.Added in version 3.16.0a0 (unreleased).
- Document.createComment(data)¶
매개 변수로 전달된 data를 포함하는 주석 노드를 만들고 반환합니다. 다른 생성 메서드와 마찬가지로 이 메서드는 노드를 트리에 삽입하지 않습니다.
- Document.createProcessingInstruction(target, data)¶
매개 변수로 전달된 target과 data를 포함하는 처리 명령어 노드를 만들고 반환합니다. 다른 생성 메서드와 마찬가지로 이 메서드는 노드를 트리에 삽입하지 않습니다.
이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
- Document.createAttribute(name)¶
어트리뷰트 노드를 생성하여 반환합니다. 이 메서드는 어트리뷰트 노드를 특정 엘리먼트와 연결하지 않습니다. 새로 생성된 어트리뷰트 인스턴스를 사용하려면 적절한
Element객체에서setAttributeNode()를 사용해야 합니다.이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
- Document.createAttributeNS(namespaceURI, qualifiedName)¶
네임스페이스가 포함된 어트리뷰트 노드를 생성하여 반환합니다. tagName 은 접두사를 가질 수 있습니다. 이 메서드는 어트리뷰트 노드를 특정 엘리먼트와 연결하지 않습니다. 새로 생성된 어트리뷰트 인스턴스를 사용하려면 적절한
Element객체에서setAttributeNode()를 사용해야 합니다.이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
- Document.getElementById(id)¶
주어진 ID를 가진 엘리먼트를 반환하며, 없으면
None을 반환합니다. DTD에서 ID 유형으로 선언되었거나Element.setIdAttribute()를 통해 설정된 어트리뷰트만 검색됩니다.
- Document.getElementsByTagName(tagName)¶
특정 엘리먼트 형 이름을 가진 모든 자손(직계 자식, 자식의 자식 등)을 검색합니다.
- Document.getElementsByTagNameNS(namespaceURI, localName)¶
특정 이름 공간 URI와 지역 이름(localname)을 사용하여 모든 자손(직계 자식, 자식의 자식 등)을 검색합니다. 지역 이름은 접두사 다음에 나오는 이름 공간의 일부입니다.
- Document.renameNode(n, namespaceURI, name)¶
n 엘리먼트 또는 어트리뷰트 노드의 이름을 변경하고 이를 반환합니다. namespaceURI 는 새 네임스페이스 URI이며, 노드가 네임스페이스에 속하지 않는 경우
EMPTY_NAMESPACE가 됩니다. name 은 새로운 퀄리파이드 네임(qualified name)입니다.n 이 다른 문서에 의해 생성된 경우
WrongDocumentErr를 발생시키고, 엘리먼트도 어트리뷰트도 아닌 경우NotSupportedErr를 발생시킵니다.
Element 객체¶
Element는 Node의 서브 클래스이므로, 모든 어트리뷰트를 상속합니다.
- Element.tagName¶
엘리먼트 형 이름. 이름 공간을 사용하는 문서에서는 콜론을 포함할 수 있습니다. 값은 문자열입니다.
- Element.setIdAttribute(name)¶
어트리뷰트 name 을 ID 유형으로 선언하여 엘리먼트가
Document.getElementById()로 찾을 수 있도록 합니다. 엘리먼트에 해당 어트리뷰트가 없는 경우NotFoundErr를 발생시킵니다.
- Element.setIdAttributeNS(namespaceURI, localName)¶
setIdAttribute()와 동일하지만, 네임스페이스 URI와 로컬 이름으로 지정된 어트리뷰트에 적용됩니다.
- Element.setIdAttributeNode(idAttr)¶
setIdAttribute()와 동일하지만, 이미 가져온 어트리뷰트 노드에 적용됩니다.
- Element.hasAttribute(name)¶
엘리먼트에 name이라는 이름의 어트리뷰트가 있으면
True를 반환합니다.
- Element.hasAttributeNS(namespaceURI, localName)¶
엘리먼트에 namespaceURI와 localName으로 이름이 지정된 어트리뷰트가 있으면
True를 반환합니다.
- Element.getAttribute(name)¶
name이라는 이름의 어트리뷰트의 값을 문자열로 반환합니다. 그러한 어트리뷰트가 없으면, 어트리뷰트에 값이 없는 것처럼 빈 문자열이 반환됩니다.
- Element.getAttributeNS(namespaceURI, localName)¶
namespaceURI와 localName으로 이름이 지정된 어트리뷰트의 값을 문자열로 반환합니다. 그러한 어트리뷰트가 없으면, 어트리뷰트에 값이 없는 것처럼 빈 문자열이 반환됩니다.
- Element.getAttributeNodeNS(namespaceURI, localName)¶
namespaceURI와 localName으로 주어진 어트리뷰트의 값을 노드로 반환합니다.
- Element.removeAttribute(name)¶
이름으로 어트리뷰트를 제거합니다.
- Element.removeAttributeNode(oldAttr)¶
존재하면, 어트리뷰트 목록에서 oldAttr를 제거하고 반환합니다. oldAttr가 없으면
NotFoundErr가 발생합니다.
- Element.removeAttributeNS(namespaceURI, localName)¶
이름으로 어트리뷰트를 제거합니다. qname이 아닌 localName을 사용함에 유의하십시오.
- Element.setAttribute(name, value)¶
문자열로 어트리뷰트 값을 설정합니다.
이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
- Element.setAttributeNode(newAttr)¶
엘리먼트에 새 어트리뷰트 노드를 추가합니다.
name어트리뷰트가 일치하는 경우 필요한 경우 기존 어트리뷰트를 교체합니다. 교체가 발생하면 이전 어트리뷰트 노드가 반환됩니다. newAttr 이 이미 사용 중이면InuseAttributeErr가 발생합니다.newAttr 이 다른 문서에 의해 생성된 경우
WrongDocumentErr를 발생시킵니다.
- Element.setAttributeNodeNS(newAttr)¶
엘리먼트에 새 어트리뷰트 노드를 추가합니다.
namespaceURI및localName어트리뷰트가 일치하는 경우 필요한 경우 기존 어트리뷰트를 교체합니다. 교체가 발생하면 이전 어트리뷰트 노드가 반환됩니다. newAttr 이 이미 사용 중이면InuseAttributeErr가 발생합니다.newAttr 이 다른 문서에 의해 생성된 경우
WrongDocumentErr를 발생시킵니다.
- Element.setAttributeNS(namespaceURI, qname, value)¶
문자열로 namespaceURI와 qname으로 지정된 어트리뷰트 값을 설정합니다. qname은 전체 어트리뷰트 이름임에 유의하십시오. 이것은 위와 다릅니다.
이름이 유효한 XML 이름이 아니면
InvalidCharacterErr를 발생시킵니다.
Attr 객체¶
Attr은 Node를 상속하므로, 모든 어트리뷰트를 상속합니다.
어트리뷰트 노드는 문서 트리의 일부가 아닙니다. 이들은 엘리먼트의 자식 노드가 아니라 attributes 맵에 포함되며, parentNode, previousSibling, nextSibling 은 항상 None 입니다.
- Attr.name¶
어트리뷰트 이름. 이름 공간을 사용하는 문서에서는 콜론을 포함할 수 있습니다.
- Attr.localName¶
콜론이 있으면 그 뒤에 오는 이름의 일부, 그렇지 않으면 전체 이름. 이것은 읽기 전용 어트리뷰트입니다.
- Attr.prefix¶
콜론이 있으면 그 앞에 오는 이름의 일부, 그렇지 않으면 빈 문자열.
- Attr.isId¶
이 어트리뷰트가 DTD에서 ID로 선언되었거나
Element.setIdAttribute()가 사용되어 ID 유형인지 여부를 나타냅니다. 이 어트리뷰트는 읽기 전용입니다.
- Attr.specified¶
어트리뷰트 값이 DTD에 의해 기본값으로 설정된 것이 아니라 문서에서 명시적으로 설정되었는지 여부를 나타냅니다. 이 어트리뷰트는 읽기 전용입니다.
NamedNodeMap 객체¶
NamedNodeMap은 Node를 상속하지 않습니다.
- NamedNodeMap.length¶
어트리뷰트 목록의 길이입니다.
- NamedNodeMap.item(index)¶
특정 인덱스를 가진 어트리뷰트를 반환합니다. 어트리뷰트를 가져오는 순서는 임의적이지만 DOM의 수명 동안 일관되게 유지됩니다. 각 항목은 어트리뷰트 노드입니다.
value어트리뷰트로 값을 얻으십시오.
- NamedNodeMap.getNamedItemNS(namespaceURI, localName)¶
주어진 네임스페이스 URI와 로컬 이름을 가진 노드를 반환하며, 해당 노드가 없으면
None을 반환합니다.
- NamedNodeMap.setNamedItem(node)¶
node 를
name을 키로 하여 맵에 추가합니다. 대체된 노드가 있으면 해당 노드를 반환하고, 없으면None을 반환합니다.node 가 다른 문서에 의해 생성된 경우
WrongDocumentErr를, 다른 엘리먼트에게 속하는 경우InuseAttributeErr를 발생시킵니다.
- NamedNodeMap.setNamedItemNS(node)¶
node 를 네임스페이스 URI와 로컬 이름을 키로 하여 맵에 추가합니다. 대체된 노드가 있으면 해당 노드를 반환하고, 없으면
None을 반환합니다.node 가 다른 문서에 의해 생성된 경우
WrongDocumentErr를, 다른 엘리먼트에게 속하는 경우InuseAttributeErr를 발생시킵니다.
- NamedNodeMap.removeNamedItem(name)¶
주어진
name을 가진 노드를 제거하고 반환합니다. 해당 노드가 없는 경우NotFoundErr를 발생시킵니다.
- NamedNodeMap.removeNamedItemNS(namespaceURI, localName)¶
주어진 네임스페이스 URI와 로컬 이름을 가진 노드를 제거하고 반환합니다. 해당 노드가 없는 경우
NotFoundErr를 발생시킵니다.
Element 객체에 대해 표준화된 getAttribute*() 메서드 계열을 사용할 수도 있습니다.
DocumentFragment 객체¶
DocumentFragment 은 노드들의 가벼운 컨테이너입니다. Node 의 서브 클래스이며, 문서 트리에 삽입될 때 자체는 삽입되지 않고 자식 노드들이 대신 삽입되어 비게 됩니다.
CharacterData 객체¶
CharacterData 는 XML 문서의 텍스트와 같은 데이터를 나타냅니다. Node 의 서브 클래스이며, Text, CDATASection, Comment 의 기본 클래스입니다. 이러한 노드들은 자식 노드를 가질 수 없습니다.
- CharacterData.data¶
문자열 형태의 노드 내용입니다.
Text와 CDATASection 객체¶
Text 인터페이스는 XML 문서의 텍스트를 나타냅니다. 구문 분석기와 DOM 구현이 DOM의 XML 확장을 지원하는 경우, CDATA로 표시된 섹션 내의 텍스트 부분은 CDATASection 객체에 저장됩니다. 이 두 인터페이스는 동일하지만, nodeType 어트리뷰트에서 다른 값을 제공합니다.
Text 은 CharacterData 인터페이스를 확장하며, CDATASection 은 Text 를 확장합니다.
- Text.data¶
문자열로 표현된 텍스트 노드의 내용.
- Text.replaceWholeText(content)¶
이 노드와 논리적으로 인접한 모든
Text노드의 텍스트를 content 로 교체하고 나머지 노드들을 제거합니다. 이 노드를 반환하며, content 가 비어 있는 경우None을 반환합니다.
- Text.splitText(offset)¶
이 노드를 offset 에서 두 개의 노드로 분할하며, 첫 번째 부분은 이 노드에 유지하고 나머지 부분으로 생성된 새로운 형제 노드를 반환합니다.
참고
CDATASection 노드의 사용이 그 노드가 완전한 CDATA 표시 섹션을 표현한다고 나타내는 것은 아닙니다, 단지 노드의 내용이 CDATA 섹션의 일부임을 나타낼 뿐입니다. 단일 CDATA 섹션은 문서 트리에서 둘 이상의 노드로 표현될 수 있습니다. 인접한 두 개의 CDATASection 노드가 다른 CDATA 표시 섹션을 나타내는지를 확인할 방법은 없습니다.
ProcessingInstruction 객체¶
XML 문서의 처리 명령어를 나타냅니다; 이것은 Node 인터페이스를 상속하며 자식 노드를 가질 수 없습니다.
- ProcessingInstruction.target¶
첫 번째 공백 문자까지의 처리 명령어의 내용. 이것은 읽기 전용 어트리뷰트입니다.
- ProcessingInstruction.data¶
첫 번째 공백 문자 다음에 오는 처리 명령어의 내용.
Entity 객체¶
Entity 는 DTD에 선언된 파싱되었거나 파싱되지 않은 엔티티를 나타냅니다. Node 의 서브 클래스이며, 엔티티 노드는 DocumentType.entities 에 포함되며 문서 트리에 삽입될 수 없습니다. 엔티티의 이름은 nodeName 입니다.
- Entity.publicId¶
엔티티의 공용 식별자이며, 지정되지 않은 경우
None입니다. 이 어트리뷰트는 읽기 전용입니다.
- Entity.systemId¶
엔티티의 시스템 식별자이며, 지정되지 않은 경우
None입니다. 이 어트리뷰트는 읽기 전용입니다.
- Entity.notationName¶
파싱되지 않은 엔티티의 표기법 이름이며, 파싱된 엔티티의 경우
None입니다. 이 어트리뷰트는 읽기 전용입니다.
Notation 객체¶
Notation 은 DTD에 선언된 표기법을 나타냅니다. Node 의 서브 클래스이며 자식 노드를 가질 수 없습니다. 표기법 노드는 DocumentType.notations 에 포함되며 문서 트리에 삽입될 수 없습니다. 표기법의 이름은 nodeName 입니다.
- Notation.publicId¶
표기법의 공용 식별자이며, 지정되지 않은 경우
11454입니다. 이 어트리뷰트는 읽기 전용입니다.
- Notation.systemId¶
표기법의 시스템 식별자이며, 지정되지 않은 경우
None입니다. 이 어트리뷰트는 읽기 전용입니다.
EntityReference 객체¶
EntityReference 는 XML 문서의 엔터티 참조를 나타냅니다. 이는 Node 의 하위 클래스입니다. 참조된 엔터티의 이름은 nodeName 이며, 자식 노드는 엔터티의 대체 텍스트이며 읽기 전용입니다.
파서가 엔터티 참조를 확장할 수 있으므로, 이러한 노드는 명시적으로 생성된 경우에만 문서에 나타납니다.
Added in version 3.16.0a0 (unreleased).
예외¶
DOM 수준 2 권장 사항은 단일 예외 DOMException과 응용 프로그램이 어떤 종류의 에러가 발생했는지 판별하도록 하는 여러 상수를 정의합니다. DOMException 인스턴스에는 구체적인 예외에 적절한 값을 제공하는 code 어트리뷰트가 있습니다.
파이썬 DOM 인터페이스는 상수를 제공하지만, 동시에 예외 집합을 확장하여 DOM에 의해 정의된 각 예외 코드마다 구체적인 예외가 존재하도록 합니다. 구현 시 적절한 구체적인 예외를 발생시켜야 하며, 각 예외는 code 속성으로 적절한 값을 제공합니다.
- exception xml.dom.DOMException¶
모든 구체적인 DOM 예외에 사용되는 베이스 예외 클래스. 이 예외 클래스는 직접 인스턴스 화할 수 없습니다.
- exception xml.dom.DomstringSizeErr¶
지정된 텍스트 범위가 문자열에 맞지 않을 때 발생합니다. 이것은 파이썬 DOM 구현에서 사용되는 것으로 알려지지 않았지만, 파이썬으로 작성되지 않은 DOM 구현에서 수신될 수 있습니다.
- exception xml.dom.HierarchyRequestErr¶
노드 형이 허용하지 않는 곳에 노드를 삽입하려고 할 때 발생합니다.
- exception xml.dom.IndexSizeErr¶
메서드의 인덱스(index)나 크기(size) 매개 변수가 음수이거나 허용된 값을 초과할 때 발생합니다.
- exception xml.dom.InvalidAccessErr¶
하부 객체에서 매개 변수나 연산이 지원되지 않으면 발생합니다.
- exception xml.dom.InvalidCharacterErr¶
이 예외는 문자열 매개 변수에 XML 1.0 권장 사항에서 사용 중인 컨텍스트에서 허용되지 않는 문자가 포함될 때 발생합니다. 예를 들어, 엘리먼트 형 이름에 스페이스가 있는
Element노드를 만들려고 하면 이 에러가 발생합니다.
- exception xml.dom.InvalidModificationErr¶
노드 형을 수정하려고 할 때 발생합니다.
- exception xml.dom.InvalidStateErr¶
정의되지 않았거나 더는 사용할 수 없는 객체를 사용하려고 할 때 발생합니다.
- exception xml.dom.NamespaceErr¶
Namespaces in XML 권장 사항에서 허용되지 않는 방식으로 객체를 변경하려고 시도하면 이 예외가 발생합니다.
- exception xml.dom.NotFoundErr¶
참조된 컨텍스트에 노드가 존재하지 않을 때 발생하는 예외. 예를 들어,
NamedNodeMap.removeNamedItem()은 전달된 노드가 맵에 존재하지 않으면 이것을 발생시킵니다.
- exception xml.dom.NotSupportedErr¶
구현이 요청된 형의 객체나 연산을 지원하지 않을 때 발생합니다.
- exception xml.dom.NoDataAllowedErr¶
데이터를 지원하지 않는 노드에 데이터가 지정되면 발생합니다.
- exception xml.dom.NoModificationAllowedErr¶
수정이 허용되지 않는 객체(가령 읽기 전용 노드)를 수정하려고 하면 발생합니다.
- exception xml.dom.SyntaxErr¶
유효하지 않거나 잘못된 문자열이 지정될 때 발생합니다.
- exception xml.dom.ValidationErr¶
부분 유효성(partial validity)과 관련하여 특정 작업이 문서를 무효하게 만들 때 발생합니다. 이 오류는 파이썬 DOM 구현에서 사용되는 것으로 알려져 있지 않지만, 파이썬으로 작성되지 않은 DOM 구현에서 수신될 수 있습니다.
- exception xml.dom.WrongDocumentErr¶
노드가 현재 속한 것과 다른 문서에 삽입되고 구현이 한 문서에서 다른 문서로 노드 이전을 지원하지 않을 때 발생합니다.
DOM 권장 사항에 정의된 예외 코드는 이 테이블에 따라 위에서 설명한 예외에 매핑됩니다:
상수 |
예외 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
규격 준수¶
이 섹션에서는 규격 준수 요구 사항과 파이썬 DOM API, W3C DOM 권장 사항 및 파이썬의 OMG IDL 매핑 간의 관계에 관해 설명합니다.
형 매핑¶
DOM 명세에 사용된 IDL 형은 다음 표에 따라 파이썬 형에 매핑됩니다.
IDL 형 |
파이썬 형 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
접근자 메서드¶
OMG IDL에서 파이썬으로의 매핑은 Java 매핑과 거의 같은 방식으로 IDL attribute 선언에 대한 접근자 함수를 정의합니다. 다음과 같은 IDL 선언 매핑은:
readonly attribute string someValue;
attribute string anotherValue;
세 개의 접근자 함수를 제공합니다: someValue 를 위한 “get” 메서드(_get_someValue())와 anotherValue 를 위한 “get” 및 “set” 메서드(_get_anotherValue() 및 _set_anotherValue()). 특히, 매핑은 IDL 속성(attribute)이 일반적인 파이썬 속성으로 액세스 가능할 것을 요구하지 않습니다. 즉, object.someValue 가 작동할 필요가 없으며, AttributeError 를 발생시킬 수 있습니다.
그러나, 파이썬 DOM API는 일반 어트리뷰트 액세스가 동작하도록 요구합니다. 이것은 파이썬 IDL 컴파일러에 의해 생성된 일반적인 서로게이트가 작동하지 않을 수 있으며, DOM 객체가 CORBA를 통해 액세스되는 경우 래퍼 객체가 클라이언트에 필요할 수 있음을 의미합니다. CORBA DOM 클라이언트에 대해 추가적인 고려가 필요하지만, 파이썬에서 CORBA를 통해 DOM을 사용한 경험이 있는 구현자들은 이것을 문제라고 보지 않습니다. readonly로 선언된 어트리뷰트는 모든 DOM 구현에서 쓰기 액세스를 제한하지 않을 수 있습니다.
파이썬 DOM API에서는, 접근자 함수가 필요하지 않습니다. 제공되면, 파이썬 IDL 매핑으로 정의된 형식을 취해야 하지만, 어트리뷰트를 파이썬에서 직접 액세스할 수 있어서 이러한 메서드들은 불필요한 것으로 간주합니다. readonly 어트리뷰트에 “set” 접근자를 제공해서는 안 됩니다.
IDL 정의는 getElementsByTagName() 의 반환 값과 같은 특정 객체가 “live” 상태여야 한다는 것과 같은 W3C DOM API의 요구 사항을 완전히 포함하지 않습니다. 파이썬 DOM API는 구현체에 이러한 요구 사항을 강제하도록 요구하지 않습니다.
Comment 객체¶
Comment은 XML 문서의 주석을 나타냅니다.CharacterData의 서브 클래스입니다.주석의 내용을 제공하는 문자열. 이 어트리뷰트는 선행
<!--와 후행-->사이의 모든 문자를 포함하지만, 이들을 포함하지는 않습니다.