2017-06-17 5 views
0

test_gml.py私はGMLタグが保存されていないレスポンスの下に取得しています上記のコードを実行しようとすると、Pythonでlxmlのを使用してXMLに

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>' 

答えて

1

あなたは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 
関連する問題