一、问题提出
问题:现有两个应用A和B,B接收并解析A发送的XML,XML主要内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<mail>
<address>
888@163.com
</address>
<content>
”<html><body><button>test</button><button>tes</button>"quot"'quot'</body> </html>“
</content>
</mail>
标签<content>中包含html文本,如何保证html内容被正确解析?
二、解决办法
1.利用xml转义字符
什么是xml敏感字符?当进行xml解析时,xml标签的数据若包含(< > & ' ")这5个字符,则解析会报错(为什么会报错呢,google之)。
什么xml转义字符?为解决上述报错问题,用其他5个字符替换敏感字符,敏感字符会被正常解析为标签数据,这5个用于替换或者转义的字符就是xml的转义字符。
敏感字符 和转义字符的对应关系如下:
转义字符 敏感字符 字符描述
< < 小于号
> > 大于号
& & 和
' ' 单引号
" " 双引号
html文本包含很多的xml敏感字符,html文本作为xml标签的数据,若要被正常解析,则将html文本的每个xml敏感字符替换成xml转义字符即可
因此,A发送xml前将上述xml替换后,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<mail>
<address>
888@163.com
</address>
<content>
"<html><body><button>test</button>&lt;button&gt;tes&lt;/button&gt;"quot"'quot'</body> </html>"
</content>
</mail>
这样B就可正确解析A的内容。
2.使用CDATA标签
对于XML解析器,CDATA标签内部的数据都会被当做纯字符串(而非xml内容)原样解析,不管数据中是否包含xml敏感字符。
如:
<![CDATA[I can't see this text <$'"> ]]> 被解析成 I can't see this text <$'">,保持原样不变。
因此,使用CDATA标签可解决上述问题,只需将html文本包含于CDATA标签即可,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<mail>
<address>
888@163.com
</address>
<content>
<![CDATA["<html><body><button>test</button><button>tes</button>"quot"'quot'</body></html>“ ]]>
</content>
</mail>
问题貌似已经解决,但如果html文本中也包含CDATA标签时,解析器也会报错,
因为XML认为嵌套的CDATA标签是不合法的,不允许CDATA嵌套!
如:
<![CDATA[”<html><body><![CDATA[qian tao]]></body></html>“ ]]>
解决办法:解析前,将最外围CDATA包含的 “]]>”替换为“]]]]><![CDATA[>”,解析完成后替换回来即可,嘿嘿!
替换后如下:
<![CDATA[”<html><body><![CDATA[qian tao]]]]><![CDATA[></body></html>“ ]]>
问题解决!
相关推荐
与上一个版本一起使用可以可以起到提高效率的目的。本人解析xml的真实文档
总的来说,微信小程序解析Xml和Html是移动应用开发中常见的需求,涉及到数据解析、安全防护、性能优化等多个方面。熟练掌握这些技术,能帮助开发者更高效地实现文章等内容的展示,提升用户体验。
### HTML 解析为 XML 的关键技术点 #### 一、HTML 转换为 XML 的背景与意义 在 Web 开发领域,HTML 和 XML 都是非常重要的标记语言。HTML(HyperText Markup Language)主要用于构建网页结构,而 XML(Extensible ...
在本文中,我们将深入探讨XML的基本概念、解析XML的方法以及如何使用示例代码进行操作。 XML的设计目标是传输和存储数据,而不是显示数据,这与HTML的主要区别在于HTML主要用于网页展示。XML文档由元素、属性、文本...
### PHP解析XML文档知识点 #### 一、XML简介与特性 - **定义**:XML(Extensible Markup Language),即可扩展标记语言,是一种用于描述数据的标记语言,它允许用户自定义标签,使得数据的组织更为灵活且具有高度...
本文将深入探讨遇到的“解析zip中解析xml和html文档流断”的问题,以及如何解决这个问题。 首先,问题的核心在于,当你尝试在`ZipInputStream`中连续读取多个文件时,如果在读取某个XML或HTML文件后直接调用`...
DOMParser接口提供了解析XML字符串并创建DOM文档的方法,以便于开发者可以使用DOM API来查询、修改或操作XML数据。 以下是对"DOMParser解析XML"这一主题的详细说明: 1. **DOMParser的基本使用**: 使用DOMParser...
TinyXML是一个开源的、轻量级的C++库,用于解析XML文档。它提供了简单易用的API,允许开发者在C++程序中轻松地读取、写入和操作XML数据。TinyXML的优点包括小巧、易于集成、跨平台,适合小型项目和学习XML解析。 ...
三、Jsoup解析XML 虽然Jsoup主要用于HTML,但它也能处理XML文档,不过需要注意的是,XML的解析规则比HTML严格。在处理XML时,需要设置`Parser.xmlParser()`。 ```java String xml = "<root><item id='1'>Item 1...
本项目涵盖了Java解析XML的两种主要方法:DOM(Document Object Model)解析和Jsoup库的解析。这两种方法各有优缺点,适用于不同的场景。 DOM解析是将整个XML文档加载到内存中,形成一个树形结构,然后通过这个结构...
Java 使用 DOM 解析 XML 是一种常见的处理 XML 文档的方式,DOM 即 Document Object Model,它是一种 W3C 标准的 API,用于处理 XML 和 HTML 文档。在 Java 中,DOM 解析允许开发者将整个 XML 文件加载到内存中,...
在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...
在这个在线解析XML的示例中,我们将会探讨如何通过网页接口解析XML文件,以获取并展示其中的数据。 首先,XML的结构与HTML类似,但更加灵活和自定义化。它由一系列元素组成,每个元素可以有子元素,同时可以包含...
以下是一个简单的示例,演示如何使用这些库解析XML: ```java import org.w3c.dom.*; import javax.xml.parsers.*; import org.xml.sax.InputSource; import java.io.*; public class XMLParserExample { public ...
### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...
这个压缩文件可能包含了使用MFC库解析XML的示例代码,演示如何在MFC应用中集成XML处理功能。通常,MFC通过ATL(Active Template Library)中的类来支持XML解析。 5. "Readxml.zip":这个名字表明可能包含了一个简单...
在提供的代码中,我们看到一个名为`xmlClass.php`的类文件被引入,这个类提供了一种方便的方式来解析XML数据。通过创建`xml`类的实例,并传入XML字符串或文件路径,我们可以访问XML文档中的各个节点。例如,`$xml[...
本教程将详细讲解如何使用AjaxFileUpload插件上传XML文件,并且解析XML内容。 首先,我们需要了解jQuery库。jQuery是一个强大的JavaScript库,简化了DOM操作、事件处理、动画效果以及AJAX交互。在本示例中,jQuery...
在JavaScript中解析XML文件是一项常见的任务,特别是在网页开发中,我们可能需要将XML数据转换为HTML以便更好地展示或处理。JavaScript提供了DOMParser API和ActiveXObject(仅限于Internet Explorer)来解析XML。...
在Flex中解析XML文件主要通过XML类和XMLList类来实现。XML类代表一个XML文档,而XMLList类则代表XML文档中的一个节点集。下面我们将详细介绍这两个类的使用方法。 1. **XML类**:创建XML对象可以通过XML构造函数,...