function xml_to_json($source) {
if(is_file($source)){ //传的是文件,还是xml的string的判断
$xml_array=simplexml_load_file($source);
}else{
$source =uncdata($source) ;
$xml_array=simplexml_load_string($source);
}
$json = json_encode($xml_array); //php5,以及以上,如果是更早版本,请查看JSON.php
return decodeUnicode($json);
}
//处理CDATA
function uncdata($xml)
{
// States:
//
// 'out'
// '<'
// '<!'
// '<!['
// '<![C'
// '<![CD'
// '<![CDAT'
// '<![CDATA'
// 'in'
// ']'
// ']]'
//
// (Yes, the states a represented by strings.)
//
$state = 'out';
$a = str_split($xml);
$new_xml = '';
foreach ($a AS $k => $v) {
// Deal with "state".
switch ( $state ) {
case 'out':
if ( '<' == $v ) {
$state = $v;
} else {
$new_xml .= $v;
}
break;
case '<':
if ( '!' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<!':
if ( '[' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<![':
if ( 'C' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<![C':
if ( 'D' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<![CD':
if ( 'A' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<![CDA':
if ( 'T' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<![CDAT':
if ( 'A' == $v ) {
$state = $state . $v;
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case '<![CDATA':
if ( '[' == $v ) {
$cdata = '';
$state = 'in';
} else {
$new_xml .= $state . $v;
$state = 'out';
}
break;
case 'in':
if ( ']' == $v ) {
$state = $v;
} else {
$cdata .= $v;
}
break;
case ']':
if ( ']' == $v ) {
$state = $state . $v;
} else {
$cdata .= $state . $v;
$state = 'in';
}
break;
case ']]':
if ( '>' == $v ) {
$new_xml .= str_replace('>','>',
str_replace('>','<',
str_replace('"','"',
str_replace('&','&',
$cdata))));
$state = 'out';
} else {
$cdata .= $state . $v;
$state = 'in';
}
break;
} // switch
}
//
// Return.
//
return $new_xml;
}
//UNICODE转UTF-8
function decodeUnicode($str)
{
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}
分享到:
相关推荐
ASP.NET 3.5及以上版本提供了内置的序列化类,使得操作XML中的CDATA变得简单,同时也支持JSON数据格式的读写。 本文将详细介绍如何利用ASP.NET的内置类来读写XML中的CDATA,以及如何将这些数据转换为JSON格式。 ##...
本文档包含了一个完整的实例,可以实现含有CDATA 的字符串转换成xml
在Java编程中,将对象转换成XML是一种常见的数据序列化方式,这有助于数据交换和存储。当遇到包含特殊字符如 "和 "&" 的文本时...这种方式允许我们在XML中安全地包含任何类型的数据,而不会因为特殊字符导致解析错误。
### XML中的CDATA用法详解 #### 一、CDATA的基本概念 **CDATA**(Character Data)是一种特殊的文本区域,它被XML解析器视为纯文本数据,并不会对其进行解析或处理。这意味着在CDATA段落内的任何XML标签或者实体引用...
在这个过程中,`CDataContentHandler`的`characters`方法会被调用,每次接收到XML文档的字符数据,当遇到CDATA段时,`isCDATASection`方法会识别并把内容添加到`cdataBuffer`。 4. 最后,你可以从`...
在本篇文章中,我们将详细介绍如何使用C#语言读取XML文件中的CDATA节点内容。CDATA节点是一种特殊的XML节点,用于存储不需要被XML解析器解析的文本数据。在实际开发中,我们经常需要读取CDATA节点中的数据,以便进行...
在使用PHP生成XML文件时,有时会遇到需要将特殊字符或大量文本添加到元素中的情况。为了保证XML的格式正确,避免解析错误,我们需要将这部分内容用CDATA标签包裹起来。CDATA部分会告诉XML解析器忽略内部文本中的特殊...
CDATA(Character Data)是XML中的一种特殊语法,用于表示一段纯文本,其中的XML特殊字符(如", ">", "&")不需要转义。在XML中,可以使用`<![CDATA[ ... ]]>`来创建CDATA段。当处理包含大量特殊字符的数据时,使用...
本文将详细探讨如何在C#环境中处理XML中的CDATA脚本。 首先,理解CDATA的语法是至关重要的。CDATA区段通常以`<![CDATA[`开始,以`]]>`结束,其中间的任何字符都不会被XML解析器解析为XML元素或实体。例如: ```xml...
这个文本文件可能提供了相关的链接,学习者可以通过这些链接获取更多的实践练习、实例代码或者解决编程问题的方法。 在学习C语言的过程中,理解并熟练运用指针是至关重要的。C语言中的指针允许直接访问内存地址,...
$array = json_decode(json_encode((array)$xmlObject), true); ``` 3. **处理嵌套元素**: 如果XML包含嵌套元素,它们将以多维数组的形式出现。例如,如果有 `<items>` 标签包含多个 `<item>` 子标签,数组将会...
在实际应用中,可能存在一些挑战,如处理命名空间、处理XML的特性(如CDATA、注释等)以及处理非标准的XML结构。这个jar包可能已经解决了这些问题,提供了方便易用的接口。 使用这个“xml转json”资源包,开发人员...
总之,CDATA和PCDATA是XML中处理文本内容的两种不同方式。CDATA提供了一种机制,可以在不进行特殊字符转义的情况下直接插入文本,特别适用于含有大量特殊字符的情况;而PCDATA则需要对文本中的特殊字符进行转义,...
### Flex与JSON及XML的互操作 Flex作为一种强大的开源框架,允许开发者利用MXML(一种基于标签的语言)和ActionScript 3构建出丰富的互联网应用程序(RIA)。本文将深入探讨Flex如何与JSON和XML进行互操作,这对于...
在XML文档中,为了保证文档的结构正确性和语义...在这个例子中,使用CDATA块包裹比较运算符,防止XML解析器将其解释为元素或实体,确保了SQL查询的正确性。同时,由于SQL查询通常较长,使用CDATA块提高了代码的可读性。
假如 Xml 文件的内容如下: 1.XML 代码 代码如下:<?xml version=”1.0″ encoding=”utf-8″?> <sitename><![CDATA[<h2>.NET 开发]]> <siteurl>//www.jb51.net</siteurl></net>我们可以采用下面的方法...
这个函数允许我们轻松地加载XML文件,并将其转换为一个SimpleXMLElement对象,该对象提供了访问XML结构的便利方法。下面我们将详细探讨如何使用`simplexml_load_file`以及它的一些基本用法。 首先,`simplexml_load...
在这个例子中,`parseJSON()`函数展示了如何使用`JSON.decode()`方法将JSON字符串转换为ActionScript对象。一旦解析完成,你可以像操作普通AS3对象一样访问JSON数据的属性。 除了基本的解析,as3corelib还提供了...
local cdata = require " cdata " local packets = {} -- all structs get a type field so we don't lose our minds. function add_struct ( name , fields , map ) local struct = string.format ( " typedef ...