簡體   English   中英

通過XML解析時保留CDATA節

[英]Keeping CDATA sections while parsing through XML

我試圖通過添加幾個節點將現有的Xml文件轉換為另一個xml文件。 但是當我解析我的原始xml文件並將其寫入另一個xml文件時,它將從輸出xml中刪除所有CDATA 我該如何避免呢?

這是我的代碼:

tree = ET.parse(r'inputData.xml')
root = tree.getroot()
c = ET.Element("c")
c.text = "3"
root.insert(1, c)
tree.write("outputData.xml")

這是我的輸入XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Map[]>
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over&quot; background-color=&quot;rgba(0, 0, 0, 0)&quot; maximum-extent=&quot;-20037508.34,-20037508.34,20037508.34,20037508.34">    
<Style filter-mode="first" name="boundary">
        <Rule>
          <PolygonSymbolizer fill="#000000" fill-opacity="1" />
        </Rule>
      </Style>
      <Layer name="boundary" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
        <StyleName>boundary</StyleName>
        <Datasource>
          <Parameter name="type"><![CDATA[postgis]]></Parameter>
          <Parameter name="table"><![CDATA[("select * from tbl") as path]]></Parameter>
          <Parameter name="key_field"><![CDATA[gid]]></Parameter>
          <Parameter name="geometry_field"><![CDATA[geom]]></Parameter>
          <Parameter name="extent_cache"><![CDATA[auto]]></Parameter>
          <Parameter name="dbname"><![CDATA[centralized2]]></Parameter>
          <Parameter name="host"><![CDATA[localhost]]></Parameter>
          <Parameter name="port"><![CDATA[5433]]></Parameter>
          <Parameter name="user"><![CDATA[postgres]]></Parameter>
          <Parameter name="password"><![CDATA[mysecretpassword]]></Parameter>
        </Datasource>
      </Layer>
</Map>

在創建新的XML時,將刪除所有CDATA。

如果使用lxml ,則可以指定保留CDATA的解析器:

import lxml.etree

file_name = r'inputData.xml'
parser = lxml.etree.XMLParser(strip_cdata=False)
tree = lxml.etree.parse(file_name, parser)
root = tree.getroot()
c = lxml.etree.Element("c")
c.text = "3"
root.insert(1, c)
tree.write("outputData.xml")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM