在字符串中处理html和xml

问题

你想将 HTML 或者 XML 实体如 &entity; 或 &#code; 替换为对应的文本。再者,你需要转换文本中特定的字符 (比如<, >, 或 &)。

解法

如果你想替换文本字符串中的 ‘<’ 或者 ‘>’ ,使用 html.escape() 函数可以很容易的完成。比如:

>>> s = 'Elements are written as "<tag>text</tag>".'
>>> import html
>>> print(s)
Elements are written as "<tag>text</tag>".
>>> print(html.escape(s))
Elements are written as &quot;&lt;tag&gt;text&lt;/tag&gt;&quot;.
>>> # Disable escaping of quotes
>>> print(html.escape(s, quote=False))
Elements are written as "&lt;tag&gt;text&lt;/tag&gt;".
>>>

如果你正在处理的是 ASCII 文本,并且想将非 ASCII 文本对应的编码实体嵌入进去,可以给某些 I/O 函数传递参数 errors=‘xmlcharrefreplace’ 来达到这个目。比如:

>>> s = 'Spicy Jalapeño'
>>> s.encode('ascii', errors='xmlcharrefreplace')
b'Spicy Jalapeño'
>>>

为了替换文本中的编码实体,你需要使用另外一种方法。如果你正在处理 HTML或者 XML 文本,试着先使用一个合适的 HTML 或者 XML 解析器。通常情况下,这些工具会自动替换这些编码值,你无需担心。

有时候,如果你接收到了一些含有编码值的原始文本,需要手动去做替换,通常你只需要使用 HTML 或者 XML 解析器的一些相关工具函数/方法即可。比如:

>>> s = 'Spicy &quot;Jalapeño&quot.'
>>> from html.parser import HTMLParser
>>> p = HTMLParser()
>>> p.unescape(s)
'Spicy "Jalapeño".'
>>>
>>> t = 'The prompt is &gt;&gt;&gt;'
>>> from xml.sax.saxutils import unescape
>>> unescape(t)
'The prompt is >>>'
>>>

讨论

在生成 HTML 或者 XML 文本的时候,如果正确的转换特殊标记字符是一个很容易被忽视的细节。特别是当你使用 print() 函数或者其他字符串格式化来产生输出的时候。使用像 html.escape() 的工具函数可以很容易的解决这类问题。

如果你想以其他方式处理文本,还有一些其他的工具函数比如xml.sax.saxutils.unescapge() 可以帮助你。然而,你应该先调研清楚怎样使用一个合适的解析器。比如,如果你在处理 HTML 或 XML 文本,使用某个解析模块比如 html.parse 或 xml.etree.ElementTree 已经帮你自动处理了相关的替换细节。

《Python Cookbook 3rd》笔记(2.17):在字符串中处理html和xml相关推荐

  1. python cookbook 学习笔记 -- 1.5 去除字符串两端空格

    任务:将字符串中开头和结尾的多余空格去掉 解决方案: 使用string对象的lstrip,rstrip,strio方法.这几个方法都不需要参数,可以直接返回一个删除了开头,末尾或者两端的空格的原字符串 ...

  2. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  3. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  4. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  5. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  6. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  7. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  8. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  9. php 字符串去html,PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数

    strip_tags定义和用法 strip_tags() 函数剥去字符串中的 HTML.XML 以及 PHP 的标签. 注释:该函数始终会剥离 HTML 注释.这点无法通过 allow 参数改变. 注 ...

最新文章

  1. SAP 远程连接出错 SAP GUI For Windows 7.40 hostname ‘NiHLGetNodeAddr‘ unknown
  2. springboot 实现微信小程序授权并解密手机号
  3. jwPlayer为js预留的回调方法
  4. Nodejs,Npm,React安装教程
  5. centos7 mysql 5.5.27_centos7上安装mysql-5.7.27
  6. CentOS 安装Sqlite3
  7. knn约会_出色的在线约会预订系统应具备的5个功能
  8. I.MX6 make menuconfig进入x86模式
  9. 哒哒的马蹄,由心而生的感情
  10. html转换成avi,HTML_视频转换大师WinMPG Video Convert 6.63,支持格式丰富,可快速完成AVI(RM - phpStudy...
  11. .gitignore文件写法
  12. [Linux] 非root安装Lefse软件及其数据分析
  13. 一个 Spring Boot 面试题
  14. DJ1 计算机系统概述
  15. STM32之W5500:掉线重联????
  16. 使用防晒霜的十大误区
  17. C语言——简单的飞机小游戏
  18. MotionLayout动画从未如此简单!
  19. TV-Android基本架构
  20. android 开发 超级群

热门文章

  1. php 区块链算法_PoW/BFT等5种主流区块链共识算法的开源代码实现
  2. 安卓工控主板运行时会自动重启_工控主板在工业自动化中的应用
  3. java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...
  4. 【转】VS2005 CTP 版本这个CTP是什么意思
  5. 【转】2.3async中必须始终返回Task(@Ron.liang)
  6. 2.1Dynamics 365 安装问题——无法访MSCRM_CONFIG数据库
  7. ASP.Net请求处理机制初步探索之旅 - Part 5 ASP.Net MVC请求处理流程
  8. C#中集合接口关系笔记
  9. Spark2内存调优总结 - 内存划分 与 内存计算 与 调参方式
  10. volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))