一、问题提出
问题:现有两个应用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>“ ]]>
问题解决!
相关推荐
html解析为xml html解析为xml html解析为xml html解析为xml html解析为xml
java解析zip文档,解决解析zip中解析xml和html文档流断的方法.pdf
Jsoup解析html+xml
微信小程序解析Xml,以及Html文档,常用在小程序文章显示
xml的转化,这是一个例子,将一个xml文件转化成一个html文件
用ajax函数读取xml,然后解析XML.html,ajax无刷新读取文件,先使用jQuery加载XML,然后建立一个代码片段,遍历所有student节点,获取id节点,获取节点文本,获取student下的email属性,构造HTML字符串,通过append...
winform 解析xml 转换为html并预览
XML(Extensible Markup Language)可拓展标记语言,它与HTML一样,都是SGML...在Android下有三种方式解析XML,分别为SAX、DOM、PULL;它们有各自的特点,在网络编程中会经常使用,根据实际情况选择哪一种解析方式。
python处理xml很实用好用的工具 主要有BeautifulSoup和BeautifulStoneSoup,import就好,前者处理html,后者处理xml 具体使用方法可以上网查
使用Jsoup库解析HTML、XML或URL链接中的DOM节点 Jsoup进行Html的Dom解析
HTML/XML 解析器类库.zip,Kanna(鉋) is an XML/HTML parser for Swift.
Mini-XML 是一个小型 XML 解析库,您可以使用它来读取应用程序中的 XML 数据文件或字符串,而无需大型非标准库 读取 UTF-8 和 UTF-16 并写入 UTF-8 编码的 XML 文件和字符串。 数据存储在链表树结构中,保留 XML ...
有一个javascript,还有一个xml文件,javascript把xml文件解析成html。
为了解析HTML,然后学习解析XML,这个是以前写的工具类,附带XML
XML/HTML解析器(Swift).zip,Ji (戟) is an XML/HTML parser for Swift
用js解析xml,获得xml中的内容在html网页中显示,用层布局,用cookie做记录边框颜色,浏览器为ie和FireFox浏览器,这是学习css样式,层布局,js,js解析xml的基础,易学
widget加载和解析xml 字符串实例 javascript 加载和解析xml 字符串实例
pb_cat_style :档案emplyees.xml将解析和转化利用pb_catalog_style.xsl ,由此产生的HTML中显示规则 浏览器 打开HTML .. :在这里,您可以加载一个HTML文件,并看到它显示在Web浏览器控件。 雇员示例 ...
实验自用,分享+记录 This tutorial has a few tips and suggestions on how to use TinyXML effectively. I've also tried to include some C++ tips ...http://www.grinninglizard.com/tinyxmldocs/tutorial0.html
Javascript+Xslt解析Xml为Html的方法.pdf