`
kakajw
  • 浏览: 265326 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何解析XML中的HTML

 
阅读更多

一、问题提出

问题:现有两个应用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>&lt;button&gt;tes&lt;/button&gt;"quot"'quot'</body> </html>“ 
  </content>
 </mail> 
 标签<content>中包含html文本,如何保证html内容被正确解析?
  
 
二、解决办法
 

1.利用xml转义字符
   什么是xml敏感字符?当进行xml解析时,xml标签的数据若包含(< > & ' ")这5个字符,则解析会报错(为什么会报错呢,google之)。
   什么xml转义字符?为解决上述报错问题,用其他5个字符替换敏感字符,敏感字符会被正常解析为标签数据,这5个用于替换或者转义的字符就是xml的转义字符。
   敏感字符 和转义字符的对应关系如下:


    转义字符  敏感字符   字符描述  
    &lt;           <                小于号
    &gt;          >                大于号
    &amp;      &                和
    &apos;     '                  单引号
    &quot;      "                 双引号
   
    html文本包含很多的xml敏感字符,html文本作为xml标签的数据,若要被正常解析,则将html文本的每个xml敏感字符替换成xml转义字符即可

   因此,A发送xml前将上述xml替换后,如下所示:  
   <?xml version="1.0" encoding="UTF-8"?>
<mail>
  <address>
   888@163.com
  </address> 
  <content>
   "&lt;html&gt;&lt;body&gt;&lt;button&gt;test&lt;/button&gt;&amp;lt;button&amp;gt;tes&amp;lt;/button&amp;gt;&quot;quot&quot;&apos;quot&apos;&lt;/body&gt; &lt;/html&gt;"
  </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>&lt;button&gt;tes&lt;/button&gt;"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>“ ]]>

 

问题解决!

分享到:
评论

相关推荐

    kettle 解析xml xml文档,配合kettle 解析xml stax方法,完整解析案例使用

    与上一个版本一起使用可以可以起到提高效率的目的。本人解析xml的真实文档

    小程序解析Xml

    总的来说,微信小程序解析Xml和Html是移动应用开发中常见的需求,涉及到数据解析、安全防护、性能优化等多个方面。熟练掌握这些技术,能帮助开发者更高效地实现文章等内容的展示,提升用户体验。

    html解析为xml

    ### HTML 解析为 XML 的关键技术点 #### 一、HTML 转换为 XML 的背景与意义 在 Web 开发领域,HTML 和 XML 都是非常重要的标记语言。HTML(HyperText Markup Language)主要用于构建网页结构,而 XML(Extensible ...

    关于解析xml的一些demo

    在本文中,我们将深入探讨XML的基本概念、解析XML的方法以及如何使用示例代码进行操作。 XML的设计目标是传输和存储数据,而不是显示数据,这与HTML的主要区别在于HTML主要用于网页展示。XML文档由元素、属性、文本...

    PHP解析XML文档

    ### PHP解析XML文档知识点 #### 一、XML简介与特性 - **定义**:XML(Extensible Markup Language),即可扩展标记语言,是一种用于描述数据的标记语言,它允许用户自定义标签,使得数据的组织更为灵活且具有高度...

    java解析zip文档,解决解析zip中解析xml和html文档流断的方法.pdf

    本文将深入探讨遇到的“解析zip中解析xml和html文档流断”的问题,以及如何解决这个问题。 首先,问题的核心在于,当你尝试在`ZipInputStream`中连续读取多个文件时,如果在读取某个XML或HTML文件后直接调用`...

    DOMParser解析xml

    DOMParser接口提供了解析XML字符串并创建DOM文档的方法,以便于开发者可以使用DOM API来查询、修改或操作XML数据。 以下是对"DOMParser解析XML"这一主题的详细说明: 1. **DOMParser的基本使用**: 使用DOMParser...

    XML解析器,用于解析XML文件

    TinyXML是一个开源的、轻量级的C++库,用于解析XML文档。它提供了简单易用的API,允许开发者在C++程序中轻松地读取、写入和操作XML数据。TinyXML的优点包括小巧、易于集成、跨平台,适合小型项目和学习XML解析。 ...

    Jsoup解析html+xml

    三、Jsoup解析XML 虽然Jsoup主要用于HTML,但它也能处理XML文档,不过需要注意的是,XML的解析规则比HTML严格。在处理XML时,需要设置`Parser.xmlParser()`。 ```java String xml = "&lt;root&gt;&lt;item id='1'&gt;Item 1...

    java解析xml,dom解析,jsoup解析,完整项目

    本项目涵盖了Java解析XML的两种主要方法:DOM(Document Object Model)解析和Jsoup库的解析。这两种方法各有优缺点,适用于不同的场景。 DOM解析是将整个XML文档加载到内存中,形成一个树形结构,然后通过这个结构...

    java使用dom解析xml

    Java 使用 DOM 解析 XML 是一种常见的处理 XML 文档的方式,DOM 即 Document Object Model,它是一种 W3C 标准的 API,用于处理 XML 和 HTML 文档。在 Java 中,DOM 解析允许开发者将整个 XML 文件加载到内存中,...

    DOM解析XML文件例子

    在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...

    一个在线解析XML的示例

    在这个在线解析XML的示例中,我们将会探讨如何通过网页接口解析XML文件,以获取并展示其中的数据。 首先,XML的结构与HTML类似,但更加灵活和自定义化。它由一系列元素组成,每个元素可以有子元素,同时可以包含...

    xml jar 解析xml文件

    以下是一个简单的示例,演示如何使用这些库解析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

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    一些解析XML的资料

    这个压缩文件可能包含了使用MFC库解析XML的示例代码,演示如何在MFC应用中集成XML处理功能。通常,MFC通过ATL(Active Template Library)中的类来支持XML解析。 5. "Readxml.zip":这个名字表明可能包含了一个简单...

    php中用来解析xml的类

    在提供的代码中,我们看到一个名为`xmlClass.php`的类文件被引入,这个类提供了一种方便的方式来解析XML数据。通过创建`xml`类的实例,并传入XML字符串或文件路径,我们可以访问XML文档中的各个节点。例如,`$xml[...

    ajaxfileupload上传及解析xml

    本教程将详细讲解如何使用AjaxFileUpload插件上传XML文件,并且解析XML内容。 首先,我们需要了解jQuery库。jQuery是一个强大的JavaScript库,简化了DOM操作、事件处理、动画效果以及AJAX交互。在本示例中,jQuery...

    javascript解析xml文件

    在JavaScript中解析XML文件是一项常见的任务,特别是在网页开发中,我们可能需要将XML数据转换为HTML以便更好地展示或处理。JavaScript提供了DOMParser API和ActiveXObject(仅限于Internet Explorer)来解析XML。...

    flex解析xml

    在Flex中解析XML文件主要通过XML类和XMLList类来实现。XML类代表一个XML文档,而XMLList类则代表XML文档中的一个节点集。下面我们将详细介绍这两个类的使用方法。 1. **XML类**:创建XML对象可以通过XML构造函数,...

Global site tag (gtag.js) - Google Analytics