lxml의 노드 속성에 다른 네임 스페이스를 추가하는 방법

MBv

다음 lxml과 같은 XML 파일을 생성하는 데 사용 하고 있습니다. 문서 및 기타 질문 ( 1 , 2 여기에 유래에는) 올바른 방향으로 나를 슬쩍 찔렀다. 내가 고생하는 것은 markListmark노드 같은 네임 스페이스 접두사 입니다.

<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE paula SYSTEM "paula_mark.dtd">
<paula version="1.1">
    <header paula_id="Layer_Annotation.0_0000.mark"/>
    <markList xmlns:xlink="http://www.w3.org/1999/xlink" type="Annotation" xml:base="text.xml">
        <!--foo-->
        <mark id="span1" xlink:href="#sTok1"/>
        <!--bar-->
        <mark id="span2" xlink:href="#sTok2"/>
    </markList>
</paula>

이것이 내가 지금까지 얻은 것입니다. 아래 출력에서 ​​볼 수 있듯이, 나는 markList노드에 갇혀 있고 잠시 동안 머리를 두드리는 중입니다. 더 많은 넛지가 있으면 정말 감사하겠습니다.

from lxml import etree

class XMLNamespaces:
   xlink = "http://www.w3.org/1999/xlink"
   xml = "text.xml"

top = etree.Element("paula", {"version":"1.1"})
header = etree.SubElement(top, "header", {"paula_id": "annotation.mark"})
mark_list = etree.SubElement(top, "markList", {
    etree.QName(XMLNamespaces.xlink, "xlink"): "http://www.w3.org/1999/xlink",
    "type": "Annotation",
    etree.QName(XMLNamespaces.xml, "xml"): "http://www.w3.org/1999/xlink",
})

body = etree.SubElement(top, "body")    
body.text = "test body"
    
print(etree.tounicode(top, pretty_print=True))

내 현재 출력은 다음과 같습니다.

<paula version="1.1">
  <header paula_id="annotation.mark"/>
  <markList xmlns:ns0="http://www.w3.org/1999/xlink" xmlns:ns1="text.xml" ns0:xlink="http://www.w3.org/1999/xlink" type="Annotation" ns1:xml="http://www.w3.org/1999/xlink"/>
  <body>test body</body>
</paula>
mzjn

이를 수행하는 방법은 다음과 같습니다.

from lxml import etree
 
class XMLNamespaces:
   xlink = "http://www.w3.org/1999/xlink"
   xml = "http://www.w3.org/XML/1998/namespace"
 
top = etree.Element("paula", {"version": "1.1"})
 
header = etree.SubElement(top, "header", {"paula_id": "annotation.mark"})
 
mark_list = etree.SubElement(top, "markList",
                             {"type": "Annotation",
                              etree.QName(XMLNamespaces.xml, "base"): "text.xml"},
                              nsmap={"xlink": XMLNamespaces.xlink})
 
mark = etree.SubElement(mark_list, "mark",
                        {"id": "span1",  
                         etree.QName(XMLNamespaces.xlink, "href"): "#sTok1"})
 
mark = etree.SubElement(mark_list, "mark",
                        {"id": "span2",  
                         etree.QName(XMLNamespaces.xlink, "href"): "#sTok2"})
    
print(etree.tounicode(top, pretty_print=True))

산출:

<paula version="1.1">
  <header paula_id="annotation.mark"/>
  <markList xmlns:xlink="http://www.w3.org/1999/xlink" type="Annotation" xml:base="text.xml">
    <mark id="span1" xlink:href="#sTok1"/>
    <mark id="span2" xlink:href="#sTok2"/>
  </markList>
</paula>

코멘트:

  • nsmap={"xlink": XMLNamespaces.xlink})markList하위 요소의 것을 보장 xlink되지는 ns0출력에 사용된다.
  • xml접두사 의 URI http://www.w3.org/XML/1998/namespace 입니다. 이 URI는 XML 파일에있을 필요가 없기 때문에 약간 특별하지만 Python 코드에서 사용해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

PHP의 xml 노드에 네임 스페이스 속성 추가

분류에서Dev

다른 네임 스페이스에서 메서드를 호출하는 방법

분류에서Dev

하나의 코드베이스에서 네임 스페이스가 다른 두 가지 버전의 타사 라이브러리를 지원하는 방법

분류에서Dev

Modeshape 4에서 자신의 노드 유형에 대한 네임 스페이스를 등록하는 방법

분류에서Dev

XPath 속성 이름에 네임 스페이스가있는 경우 속성 이름으로 노드를 선택하는 방법

분류에서Dev

laravel 4.1의 컨트롤러에서 다른 네임 스페이스를 사용하는 방법

분류에서Dev

laravel 4.1의 컨트롤러에서 다른 네임 스페이스를 사용하는 방법

분류에서Dev

다른 네임 스페이스에 정의 된 구조체를 선언하는 방법은 무엇입니까?

분류에서Dev

C #에서 사용자 정의 네임 스페이스를 만드는 방법

분류에서Dev

C #에서 사용자 정의 네임 스페이스를 만드는 방법

분류에서Dev

Clojure의 .core 네임 스페이스에서 사용 가능한 모든 네임 스페이스의 함수를 만드는 방법은 무엇입니까?

분류에서Dev

다른 네임 스페이스에서 repl을 여는 방법

분류에서Dev

네임 스페이스가있는 XML 노드를 선택하는 방법

분류에서Dev

네임 스페이스가있는 XML에서 노드를 가져 오는 방법

분류에서Dev

<dto : telefono> 속성에 대한 네임 스페이스가있는 아래 xml의 Xpath를 찾는 방법

분류에서Dev

Kubernates의 다른 네임 스페이스에서 DB 포드 및 서비스 (DNS) 로의 트래픽을 차단하는 방법은 무엇입니까?

분류에서Dev

XSLT를 사용하여 XML의 특정 노드에 네임 스페이스 추가

분류에서Dev

한 네임 스페이스에서 다른 네임 스페이스로 프로세스를 이동하는 방법은 무엇입니까?

분류에서Dev

Compoundjs에서 서로 다른 네임 스페이스의 개별 레이아웃을 처리하는 방법

분류에서Dev

글로벌 네임 스페이스가 아닌 다른 네임 스페이스에서 함수와 데이터를 정의하는 방법은 무엇입니까?

분류에서Dev

k8s 객체를 한 네임 스페이스에서 다른 네임 스페이스로 전환하는 방법은 무엇입니까?

분류에서Dev

시스템 네임 스페이스의 클래스보다 작성한 클래스에 우선 순위를 부여하는 방법이 있습니까?

분류에서Dev

동일한 접두사, XML의 여러 네임 스페이스-Python에서 다른 요소에 영향을주지 않고 요소 속성을 추가하는 방법

분류에서Dev

다른 네임 스페이스에있는 코드를 더 현명하게 사용하는 방법이 있습니까?

분류에서Dev

PHP는 부모 클래스의 네임 스페이스 상속에서 클래스를 중지하는 방법

분류에서Dev

네임 스페이스가 있는지 확인하는 코드 스니퍼를 비활성화하는 방법

분류에서Dev

노드가 아닌 브라우저에서 모듈을 네임 스페이스하는 방법

분류에서Dev

"네임 스페이스 모드"에서 jsf를 사용하는 방법

분류에서Dev

PhpStorm에서 PHP DS 네임 스페이스를로드하는 방법

Related 관련 기사

  1. 1

    PHP의 xml 노드에 네임 스페이스 속성 추가

  2. 2

    다른 네임 스페이스에서 메서드를 호출하는 방법

  3. 3

    하나의 코드베이스에서 네임 스페이스가 다른 두 가지 버전의 타사 라이브러리를 지원하는 방법

  4. 4

    Modeshape 4에서 자신의 노드 유형에 대한 네임 스페이스를 등록하는 방법

  5. 5

    XPath 속성 이름에 네임 스페이스가있는 경우 속성 이름으로 노드를 선택하는 방법

  6. 6

    laravel 4.1의 컨트롤러에서 다른 네임 스페이스를 사용하는 방법

  7. 7

    laravel 4.1의 컨트롤러에서 다른 네임 스페이스를 사용하는 방법

  8. 8

    다른 네임 스페이스에 정의 된 구조체를 선언하는 방법은 무엇입니까?

  9. 9

    C #에서 사용자 정의 네임 스페이스를 만드는 방법

  10. 10

    C #에서 사용자 정의 네임 스페이스를 만드는 방법

  11. 11

    Clojure의 .core 네임 스페이스에서 사용 가능한 모든 네임 스페이스의 함수를 만드는 방법은 무엇입니까?

  12. 12

    다른 네임 스페이스에서 repl을 여는 방법

  13. 13

    네임 스페이스가있는 XML 노드를 선택하는 방법

  14. 14

    네임 스페이스가있는 XML에서 노드를 가져 오는 방법

  15. 15

    <dto : telefono> 속성에 대한 네임 스페이스가있는 아래 xml의 Xpath를 찾는 방법

  16. 16

    Kubernates의 다른 네임 스페이스에서 DB 포드 및 서비스 (DNS) 로의 트래픽을 차단하는 방법은 무엇입니까?

  17. 17

    XSLT를 사용하여 XML의 특정 노드에 네임 스페이스 추가

  18. 18

    한 네임 스페이스에서 다른 네임 스페이스로 프로세스를 이동하는 방법은 무엇입니까?

  19. 19

    Compoundjs에서 서로 다른 네임 스페이스의 개별 레이아웃을 처리하는 방법

  20. 20

    글로벌 네임 스페이스가 아닌 다른 네임 스페이스에서 함수와 데이터를 정의하는 방법은 무엇입니까?

  21. 21

    k8s 객체를 한 네임 스페이스에서 다른 네임 스페이스로 전환하는 방법은 무엇입니까?

  22. 22

    시스템 네임 스페이스의 클래스보다 작성한 클래스에 우선 순위를 부여하는 방법이 있습니까?

  23. 23

    동일한 접두사, XML의 여러 네임 스페이스-Python에서 다른 요소에 영향을주지 않고 요소 속성을 추가하는 방법

  24. 24

    다른 네임 스페이스에있는 코드를 더 현명하게 사용하는 방법이 있습니까?

  25. 25

    PHP는 부모 클래스의 네임 스페이스 상속에서 클래스를 중지하는 방법

  26. 26

    네임 스페이스가 있는지 확인하는 코드 스니퍼를 비활성화하는 방법

  27. 27

    노드가 아닌 브라우저에서 모듈을 네임 스페이스하는 방법

  28. 28

    "네임 스페이스 모드"에서 jsf를 사용하는 방법

  29. 29

    PhpStorm에서 PHP DS 네임 스페이스를로드하는 방법

뜨겁다태그

보관