simpleXML虽然很容易用。但是需要知道XML的结构,否则操作起来是很麻烦的,甚至无法达到目的,毕竟API就那么几个,很局限。而相对来说,DOM操作的API就很多,大多数操作都能胜任。
simpleXML存在的问题:
比如xml结构有两个title
<msg>
<titles>
<title>3344</title>
<title>3344</title>
</titles>
</msg>
通过以下代码可以访问到2个title节点的值。但是这必须知道xml的结构。而且要替换节点的值,xpath是做不到的。是复制而不是引用。
$xml = simplexml_load_file("test.xml");
//echo count($xml->author->children());
$s = "title";
$num = count($xml->msg->$s);
$titles =$xml->msg->$s;
//$xml->msg->children();
$xpath = & $xml->xpath("//title");
foreach ($xml->msg->title as $child)
{
var_dump($child);
echo "Child node: " . $child;
$child = "sss";
}
$xml->asXML("test.xml");
如果通过遍历节点和属性来更改节点和属性的值,处理两个相同节点的时候,只能获取第一个节点的simplexmlElement对象,即使通过xpath拿到第二个也更改不了,因为是复制的。
例如:
1
$b = "title";
$node->$b[1] = "ccc";
2、
$node->$title[1] = "ccc";
$num = count($node-> $sub);
以上两个写法,第一个获取到的是空的simpleXMLELEMNT,它会新生成一个t的节点,内容是ccc。而第二个写法会找到第2个节点名称是title的节点并将它的内容改为ccc。
第一种完全偏离了我的想法。但没有其它办法达到第二种的效果。因此,我放弃了用simpleXML来解析XML。
-----------------------------
//遍历节点
function iterateNode($node) {
if (count($node->children()) == 0) {
echo "dfd";
} else {
foreach ($node->children() as $child) {
$sub = $child->getName(); //子节点名称
$child = replaceStr($child); //更改值
$subs = $node-> $sub;
if (count($subs) > 1) { //如果存在多个相同的子节点,则只会更改第一个节点的属性。因此要遍历更改
foreach ($subs as $i) {
iterateAttr($i); //更改属性
}
} else {
iterateAttr($node-> $sub); //更改属性
}
if (count($node->children()) == 0) {
@ $node-> $sub = replaceStr($sub); //会有warning提示。$node->$sub是数组类型。
} else {
$num = count($node-> $sub);
if ($num > 1) { //如果存在多个相同的子节点,则只会遍历第一个节点。
//$node->rectangle[1] 和 $node->$sub[1] 虽然$sub等于rectangle,但是这两者是不同的类型,
//第一个返回的是节点的值,而第二个返回的是一个空的simpleXML对象 SimpleXMLElement。
//可以通过xpath查询出节点的值,但是不能通过给xpath赋值改变节点的值。
for($i=0;$i<$num;$i++){
}
} else {
if(count($node->$sub->children()) == 0){
@ $node->$sub = replaceStr($node->$sub); //会有warning提示。$node->$sub是数组类型。
}else{
iterateNode($node-> $sub); //遍历子节点
}
}
}
}
}
}
//遍历属性 更改属性
function iterateAttr($node) {
foreach ($node->attributes() as $attr => $val) {
$newval = replaceStr($val);
$node["$attr"] = $newval; //更改XML文件内容
}
}
分享到:
相关推荐
在这个示例中,我们将深入探讨SimpleXML的使用方法和核心特性,以及如何通过它来解析XML文档。 首先,让我们理解XML(eXtensible Markup Language)的基本概念。XML是一种标记语言,设计用来传输和存储数据,其结构...
综上所述,SimpleXML是PHP处理XML数据的强大工具,它的易用性使得XML解析变得轻而易举。无论是简单的XML文档还是复杂的结构,SimpleXML都能提供简洁的解决方案。通过熟练掌握SimpleXML,开发者可以更高效地处理XML...
为了处理XML文档,Delphi提供了一个名为SimpleXML的库,它是一个轻量级且易于使用的XML解析器。本篇文章将深入探讨如何在Delphi中使用SimpleXML来解析XML文件。 首先,我们需要了解XML的基本结构。XML文档由元素、...
"converter-simplexml-2.1.0.jar"则是Retrofit2的一个扩展,它集成了SimpleXML库,使得Retrofit2可以理解并处理XML格式的响应。通过添加这个转换器,开发者无需手动解析XML,而是可以直接将XML响应映射到自定义的...
只要文档层次不深、不很复杂,而且没有混合内容,SimpleXML 要比使用 DOM 简单得多。如果事先知道文档结构该工具将更有用,虽然通过 XPath 可以满足这种要求。虽然不支持验证和混合内容有点不方便,但不是绝对的。很...
总结来说,"GWT SimpleXML, XML解析"的主题涵盖了如何利用GWT的HTTP通信能力和SimpleXML库在客户端解析服务器返回的XML数据,这对于开发交互性强、数据驱动的Web应用具有重要的实际意义。理解并掌握这些技术,有助...
SimpleXML是PHP中的一种轻量级的XML处理库,它为开发者提供了方便的方式来解析和操作XML文档。在PHP中,SimpleXML是...在处理如`parser_profile.xml`这样的文件时,SimpleXML的易用性使得数据提取和操作变得异常简单。
在本教程中,我们将深入探讨如何在Android Studio项目中使用Retrofit与simplexml库一起解析XML数据。简单XML库(Simple XML)是Java中一个轻量级、...在实际开发中,这种技术可以极大地提高代码的可读性和可维护性。
SimpleXML汉化修正版——D6-D2010,专用于解析 XML 文件的单元,这个不是官方原版,在使用过程中对发现的Bug进行过修正,已汉化成中文,如果觉得不可靠,请下载官方原版。 目前注意事项: 当保存XML 的时候,...
通过阅读和理解SimpleXML的源代码,开发者可以更深入地了解XML处理的细节,提高代码的灵活性和可维护性。不过,由于这里只给出了"SimpleXML"这个文件名,没有具体的代码示例,要获取更多具体的信息,还需要查看实际...
SimpleXML库(如PHP中的SimpleXMLElement类)提供了一种简洁的方式来处理XML数据,无需深入了解DOM的复杂性。 描述 "a simple xml dom parser" 暗示这是一个简化版的DOM解析器,它可能具有以下特点: 1. 易于使用:...
SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式,只要您知道 XML 文档的布局。 SimpleXML 转换 XML 文档到 SimpleXMLElement 对象。 通过正常的属性选择器和数组迭代器,这个对象能够像其他对象一样...
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。 SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如: 元素被转换为 SimpleXMLElement 对象的单一属性。当同一...
标题 "haoxoingdi_SimpleXML D6-D2010 改正版.rar" 提供的信息表明,这是一个针对 Delphi 开发者的资源,包含了 SimpleXML 组件的修改版,适用于 Delphi 6 到 Delphi 2010 的版本。这个组件库可能为 Delphi 应用程序...
SimpleXML库提供了一种简单易用的方式来解析和操作XML文档。下面我们将详细讨论如何使用SimpleXML来处理XML文件。 1. **SimpleXML简介** SimpleXML是PHP 5引入的一个轻量级库,用于处理XML数据。它通过将XML文档...
在分布式系统(如Zookeeper)和云原生环境中,"jk_simplexml"是处理XML配置文件的得力工具,能够帮助提高代码的可维护性和效率。无论是新手还是经验丰富的Python开发者,都应该了解并考虑在适当的情况下使用这个库,...
标题 "haoxiongdi_SimpleXML for D6-D2007-D2009.rar" 提供的信息表明,这是一个与 Delphi 开发相关的压缩包,它包含了一个名为 "SimpleXML" 的组件或库,适用于 Delphi 的多个版本,从 Delphi 6 到 Delphi 2009。...
首先,创建一个SimpleXML对象有三种方式: 1. 使用`new`关键字创建: ```php $xml = "<personinfo><item><id>1</id><name>aaa</name><age>16</age></item><item><id>2</id><name>bbb</name><age>26</age></item>...
1. **易用性**:SimpleXML提供了更直观的方式来访问和操作XML数据,例如,通过属性和方法直接访问XML元素和属性。 2. **效率**:虽然DOM可以处理复杂的XML操作,但对于简单的读取和写入任务,SimpleXML通常更快。 3....
SimpleXML2 是一个用于读取 XML 文件和编写 XML 文件的库。 它是用 C++ 编写的,要使用它,您只需在项目中包含一个源文件和一个头文件,然后它就可以工作了。