저는 Python에서 ElementTree 객체 구조를 사용하여 XML을 만들려고합니다. 처리 지시 사항을 제외하고는 모두 잘 작동합니다. 나는 PI 함수를 ProcessInstruction() 팩토리 함수를 사용하여 쉽게 만들 수있다. 그러나 그것은 elementtree에 추가되지 않는다. 수동으로 추가 할 수 있지만 PI가 정상적으로 배치 된 루트 요소 위에 추가하는 방법을 알아낼 수 없습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 나는 그것을하는 대체 방법을 많이 알고 있지만, 이것은 내가 찾을 수없는 어딘가에 만들어 져야만하는 것처럼 보입니다.ElementTree in Python 2.6.2 처리 지침이 지원됩니까?
답변
lxml
라이브러리를 사용해보십시오. ElementTree API 다음에 많은 추가 기능이 추가되었습니다. compatibility overview에서 : etree이 그들을 읽고 각각 설명 또는 ProcessingInstruction 요소로 취급하므로하면서
ElementTree는 의견과 처리 명령 XML을 구문 분석 무시합니다.주석은 텍스트 내용에서 주석을 찾은 다음 주석 요소로 나눠서 표시됩니다.
부울
remove_comments
및/또는remove_pis
키워드 인수를 사용하는 파서에 전달하여이 동작을 비활성화 할 수 있습니다. 편리하고 이식 가능한 코드를 지원하려면 기본값etree.XMLParser
대신etree.ETCompatXMLParser
을 사용할 수도 있습니다. 가능한 한 ElementTree 파서에 가깝게 설정된 기본 설정을 제공합니다.
stdlib에는 없지만 표준 경험 ElementTree가 제공하지 않는 물건이 필요할 때 가장 좋습니다. lxml이 API를
그래, 가능하다고 생각하지 않습니다. 죄송합니다. ElementTree는 DOM보다 (네임 스페이스가 아닌) 요소 중심의 XML 처리에 대한 더 간단한 인터페이스를 제공하지만 전체 XML 정보 세트를 지원하지 않는다는 점에서 가격이 책정됩니다.
루트 요소 외부에있는 콘텐츠 (주석, PI, doctype 및 XML 선언)를 나타내는 명백한 방법이 없으며 이러한 요소도 구문 분석시 삭제됩니다. (옆에 : DTD 내부 하위 집합에 지정된 기본 속성이 포함되어 ElementTree가 엄격하게 비준수 XML 프로세서라고 말합니다.)
파이썬 네이티브를 서브 클래 싱하거나 멍키 패칭하여이 문제를 해결할 수 있습니다 ElementTree 구현의 write()
_root
을 _write하기 전에 여분의 PI에 _write
을 호출하는 방법이 있지만 약간 깨지기 쉽습니다.
전체 XML 정보 세트에 대한 지원이 필요한 경우 DOM을 사용하는 것이 가장 좋습니다.
나는 ElementTree에 대해 많이 모른다. 그러나 "xe"라고 쓰는 라이브러리를 사용하여 문제를 해결할 수도 있습니다.
xe는 구조화 된 XML을 쉽게 만들 수 있도록 설계된 일련의 Python 클래스입니다. 여러 가지 이유로 오랜 시간에 걸쳐 작업하지는 않았지만, 궁금한 점이 있거나 버그를 수정해야 할 경우 도움을 드릴 수 있습니다.
그것은 처리 지침과 같은 것들을 지원하는 기본적인 뼈를 가지고 있으며, 나는 당신이 필요로하는 것을 할 수 있다고 생각합니다. (처리 지시 사항을 추가하기 시작했을 때, 나는 그 코드를 이해할 수 없었고, 코드가 필요 없기 때문에 코드는 일종의 반 - 구운 것입니다.)
유능한. 여기
http://home.avvanta.com/~steveha/xe.html
은 그것을 사용의 예 : 당신은 위의 코드를 실행 한 후print doc
를 실행 한 경우 여기
import xe
doc = xe.XMLDoc()
prefs = xe.NestElement("prefs")
prefs.user_name = xe.TextElement("user_name")
prefs.paper = xe.NestElement("paper")
prefs.paper.width = xe.IntElement("width")
prefs.paper.height = xe.IntElement("height")
doc.root_element = prefs
prefs.user_name = "John Doe"
prefs.paper.width = 8
prefs.paper.height = 10
c = xe.Comment("this is a comment")
doc.top.append(c)
당신은 얻을 것이 무엇 :
<?xml version="1.0" encoding="utf-8"?>
<!-- this is a comment -->
<prefs>
<user_name>John Doe</user_name>
<paper>
<width>8</width>
<height>10</height>
</paper>
</prefs>
당신이 만약 관심이 있지만 도움이 필요하면 알려주세요.
프로젝트에 대한 행운을 빕니다.
는 "underdocumented"조금 비록 그것이 쉬울 수 없습니다 : 당신은 최고 수준의 처리 명령이 필요한 경우
는이처럼 만들 :
from lxml import etree
root = etree.Element("anytagname")
root.addprevious(etree.ProcessingInstruction("anypi", "anypicontent"))
가 결과 문서는 다음과 같이 표시됩니다 IMO는이 외에도 고급 API를 설정하는 또 다른 기능 때문에 그들은 확실히 그들의 질문에이를 추가해야
<?anypi anypicontent?>
<anytagname />
.
f = open('D:\Python\XML\test.xml', 'r+')
old = f.read()
f.seek(44,0) #place cursor after xml declaration
f.write('<?xml-stylesheet type="text/xsl" href="C:\Stylesheets\expand.xsl"?>'+ old[44:])
저도 같은 문제에 직면하고 올바르게 심지어 내 경우 root.insert (0, PI)
의 요소 방법 중 하나를 사용하여 절단하기 위해 여러 가지 방법을 시도한 후 .xml 파일에 PI를 삽입하는 데 실패한 후이 원액 내놓았다되었다 삽입 된 PI를 올바른 위치에만 붙여 넣어 예기치 않은 위치에서 삭제할 데이터를 찾습니다.
- 1. Python ElementTree 중복 검사기
- 2. Python ElementTree XML 구문 분석
- 3. poster.encode 모듈은 python appengine에서 지원됩니까?
- 4. ElementTree 텍스트에 태그 삽입
- 5. MySQL in Python 2.5
- 6. Azure WorkerRole 오류 처리 지침이 필요합니다.
- 7. 알 수없는 XML 엔터티를 구문 분석하기위한 Python ElementTree 지원?
- 8. ElementTree 네임 스페이스 불편하다
- 9. xpath 선택기 문제를 극복하기 위해 python-elementtree 업데이트
- 10. Regex in Python
- 11. Symlink Exploits in Python
- 12. SQLite in Python 2.2.3
- 13. usleep in Python
- 14. binary16 in Python
- 15. 정확한 trig in python
- 16. webapp in python
- 17. Generics/templates in python?
- 18. dictionary in django python
- 19. org.apache.commons.lang.StringEscapeUtils in python
- 20. Delaunay tessellation in Python?
- 21. Yahoo Chat in Python
- 22. Mutex in Python Twisted
- 23. __rlshift__, __ror__ in Python
- 24. MongoDB gui in python
- 25. Vix API in python
- 26. Flash in Python
- 27. sqlite3 in Python
- 28. SCons in Python
- 29. TDD in python 3.1
- 30. import statement in python
루트 요소에는 없습니다. –