无法在python中使用lxml将gml字符串附加到xml

2024-05-08 12:33:52 发布

您现在位置:Python中文网/ 问答频道 /正文

试验_gml.py公司你知道吗

from lxml import etree
import lxml
xml_response = lxml.etree.Element('xmlResponse')
mapping = lxml.etree.SubElement(xml_response,'mapping',{"id":"AHGJHKSHQWEIUELQWDKJQEDH"})
services_element = lxml.etree.SubElement(mapping, 'service_name')
services_element.text = "gml_info"
gml_info = '''<gml:Envelope srsName="EPSG:4326">
        <gml:lowerCorner>1 2</gml:lowerCorner>
        <gml:upperCorner>10 20</gml:upperCorner>
    </gml:Envelope>'''
services_element = lxml.etree.SubElement(mapping, 'gml_info')
services_element.text = gml_info
print (etree.tostring(xml_response))

当我尝试运行上面的代码时,我得到了下面的响应,其中gml标记没有被保留。你知道吗

答复:

b'<xmlResponse><mapping id="AHGJHKSHQWEIUELQWDKJQEDH">
<service_name>gml_info</service_name>
<gml_info>&lt;gml:Envelope 
srsName="EPSG:4326"&gt;\n\t\t&lt;gml:lowerCorner&gt;1 
2&lt;/gml:lowerCorner&gt;\n\t\t&lt;gml:upperCorner&gt;10 
20&lt;/gml:upperCorner&gt;\n\t&lt;/gml:Envelope&gt;</gml_info>
</mapping></xmlResponse>'

Tags: ltgtinforesponseservicexmlelementlxml
1条回答
网友
1楼 · 发布于 2024-05-08 12:33:52

必须将其添加为xml子树,而不是text node。你知道吗

from lxml import etree
import lxml
import io

xml_response = lxml.etree.Element('xmlResponse')
mapping = lxml.etree.SubElement(xml_response, 'mapping', {"id": "AHGJHKSHQWEIUELQWDKJQEDH"})
services_element = lxml.etree.SubElement(mapping, 'service_name')
services_element.text = "gml_info"

gml = io.StringIO('''<root xmlns:gml="gml"><gml:Envelope srsName="EPSG:4326">\
<gml:lowerCorner>1 2</gml:lowerCorner>\
<gml:upperCorner>10 20</gml:upperCorner>\
</gml:Envelope></root>''')
gml_info = etree.parse(gml).getroot()


services_element = lxml.etree.SubElement(mapping, 'gml_info')
services_element.extend(gml_info)

print(etree.tostring(xml_response))

我必须为gml添加带有名称空间声明的<root xmlns:gml="gml">元素(您应该将其更改为真正的链接)。如果没有它,您将得到错误:

lxml.etree.XMLSyntaxError: Namespace prefix gml on Envelope is not defined, line 1, column 41

相关问题 更多 >