다음 lxml
과 같은 XML 파일을 생성하는 데 사용 하고 있습니다. 문서 및 기타 질문 ( 1 , 2 여기에 유래에는) 올바른 방향으로 나를 슬쩍 찔렀다. 내가 고생하는 것은 markList
및 mark
노드 와 같은 네임 스페이스 접두사 입니다.
<?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>
이를 수행하는 방법은 다음과 같습니다.
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] 삭제
몇 마디 만하겠습니다