在解析 XML 时保留 CDATA 部分

2023-12-02

我正在尝试将现有的 Xml 文件转换为另一个 xml 文件,并添加一些节点。但是当我解析原始 xml 文件并将其写入另一个 xml 文件时,它会删除所有CDATA来自输出 xml。我怎样才能避免它?

这是我的代码:

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")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在解析 XML 时保留 CDATA 部分 的相关文章

随机推荐

  • “clear:both”和“overflow:hidden”是否以相同的方式使容器包裹浮动子项?

    我有一个带有浮动儿童的 div 我知道我可以通过以下两种方式拉伸高度 container border 2px solid ccc margin bottom 250px container 2 after content display
  • 如何以编程方式卸载应用程序

    I tried this this以编程方式卸载应用程序 我没有收到任何错误或异常 但该应用程序未从我的计算机上卸载 另请参阅尝试过的代码 public static string GetUninstallCommandFor string
  • 尝试在不允许该表的页面上插入记录

    当尝试从扩展程序创建新记录时 我收到上面的消息 尝试在不允许该表的页面上插入记录 我尝试在其中创建记录的 页面 是 sysfolder 而不是页面 t3lib extMgm allowTableOnStandardPages user my
  • 使用 openSSL 在 PHP 中加密(大)文件

    我正在尝试使用 AES 加密 PHP 中的 大 文件 并研究了使用 Mcrypt 和 OpenSSL 问题是到目前为止我发现的所有解决方案都只加密字符串 而我尝试加密的文件将触发最大PHP 的内存限制 不幸的是不能设置得更高 我将如何实现这
  • 以编程方式读取资源字符串

    我大约有 6 个 dll 没有源代码 它们不包含任何逻辑 而只是包含字符串表的 resx 文件 有没有一种方法可以从每个 dll 的字符串表中提取 Id 和值并将其导出到文本文件 知道程序集名称和资源文件 您可以使用反射加载它 Resour
  • 在 MySql 中检测日期是否处于夏令时

    我继承了一个遗留应用程序 其中所有日期和时间都存储在本地时区 英国 中 我无法改变它们的存储方式 但是 要求是在应用程序中显示 GMT 中的所有日期 因此 当我从数据库中检索事件列表时 我需要它以这种时间格式显示所有事件 同时观察每个特定事
  • 获取所有公共用户贡献,又名“日历数据”(github api v3)

    我发现了很多线程 甚至有几个项目使用 github api 之外的 api 嵌入了贡献日历 但这些方法或线程都没有真正回答这个问题 一个接近但这是不行的 我只是想获取用户的贡献总数 如 github 个人资料页面上的日历所示 如下所示 ap
  • 多个垂直 100% 高度和宽度 div

    我试图创建多个宽度和高度均为 100 的 div 但始终失败 例子 div div 100 height width all you can see when opening this file div div I ll be 100 wh
  • Vim 自动完成,包括当前文件和字典

    在 Vim 中 我们可以通过使用字典或当前文件来完成代码 以提出建议 但我所追求的是两者兼得 我的 vimrc 有以下代码完成 k uses dictionary i uses current and included files t ta
  • 自动播放声音最“兼容”的方式是什么?

    我想在我的页面中添加一个自动播放的声音 但似乎所有方式都需要一些插件或 codex 或 idk 所以我不太确定什么是最好的音频格式和编码方式 以便它适用于大多数用户和浏览器 有没有适合大多数人的方法 Thanks 您可以使用BGSOUND像
  • 如何在使用 CURRENT_SOURCE_DIR 的子目录中定义 cmake 宏?

    我想做的是创建一个CMakeLists txt它定义了一个在父作用域中使用的方便宏 我可以很好地使用宏 然而 我使用了 CMAKE CURRENT SOURCE DIR 不幸的是 它不是定义宏的 CMake 脚本的目录 而是调用它的目录 我
  • “使用”类范围的类型别名:[何时]方法中的用法可以在类型别名之前?

    昨天 当我能够编译具有使用以下方法的代码时 我感到 愉快地 惊讶 使用类型别名即使别名的声明直到稍后才在类定义中声明 类型别名的这种 前向 用法是否有效 我认为是这样 因为 Clang 5 和 GCC 4 9 都是这样工作的 什么规则涵盖了
  • MATLAB 图窗中选定绘图对象的图例

    对于 MATLAB 图形 我有类似的内容 figure hold on line 1 2 3 4 line 5 6 7 8 plot x1 y1 r plot x2 y2 b 其中 x1 y1 x2 y2 都是向量 我怎样才能添加legen
  • 如何在 plpgsql 中编写一个函数来将日期与没有时区的时间戳进行比较?

    我想编写一个函数 返回一个表 其中包含所有行firstDate and lastDate 行具有数据类型没有时区的时间戳它们还必须具有特定的节点 ID 这是我的功能 CREATE OR REPLACE FUNCTION get measur
  • 如何使用 dataType: 'jsonp' 但 Accept 标头中仍然有 application/json ?

    我想访问另一个域上的 REST 服务 如果在 JQuery 中我指定 dataType json 正如预期的那样 它失败了 因为对于跨域调用 必须使用 JSONP 当我将其更改为 dataType jsonp 它预计可以工作 但由于服务器期
  • 在应用程序更新中播放 Core,在生产版本上提供 UPDATE_NOT_AVAILABLE

    我已经集成了 Play 核心应用内更新 它在测试轨道中运行良好 但是当在生产轨道中发布版本时 它总是给出 UPDATE NOT AVAILABLE 标志 我认为问题可能是因为启用了定时发布 发布概述 是否有任何修复或任何设置需要我从游戏控制
  • ICMP 回显数据包的最大合法大小

    有人可以解释一下为什么 ICMP 回显数据包的最大合法大小计算如下 65535 20 8 65507 Thanks 65535 字节是 IPv4 网络数据包允许的最大大小 而 20 和 8 是 IP 和 ICMP 标头的大小 最多为 ICM
  • python 行编辑 telnet 服务器

    我正在用 python 创建一个服务器 它所做的事情无关紧要 但我希望它接受 telnet 连接并提供具有行编辑功能 tabcompletion emacs vi mode 等 和每个会话的历史记录的命令行界面 我已成功创建 telnet
  • 如何在java中获取命令提示符输出?

    如何获取命令提示符的输出 这意味着我已经打开了这样的命令提示符 Process process Runtime getRuntime exec cmd c start cmd exe K C Editor editorTemp exe 我无
  • 在解析 XML 时保留 CDATA 部分

    我正在尝试将现有的 Xml 文件转换为另一个 xml 文件 并添加一些节点 但是当我解析原始 xml 文件并将其写入另一个 xml 文件时 它会删除所有CDATA来自输出 xml 我怎样才能避免它 这是我的代码 tree ET parse