用PHP读取和写入xmlDOM代码
使用DOM读取XML /
doc =新DOMDocument(美元);
文件->加载美元(测试。XML);
书=美元美元DOC -> getElementsByTagName(书);
foreach($书书美元){
本书作者=美元美元-> getElementsByTagName(作者);
作者=美元美元作者->(0)->项目节点; / /节点根据节点类型的属性设置或返回一个节点的值。
美元美元的出版商=书> getElementsByTagName(出版商);
出版商=美元美元出版商->(0)->节点项目;
标题=美元美元书-> getElementsByTagName(标题);
标题=美元美元标题->(0)->节点项目;
回声标题:$标题作者:$作者出版社:出版商;
}
*
脚本首先创建一个新的DOMDocument对象使用Load方法加载图书XML到对象后,该脚本使用getelementsbyname方法指定的名称下一个列表中的所有元素。
在本书结环,脚本使用getelementsbyname方法得到作者、出版商和标题tags.nodevalue节点,在节点的文本脚本然后显示值。
* /
复制代码代码如下所示:
使用SAX解析器读取XML /
g_books美元=阵();
g_elem美元= null;
功能startElement(美元美元美元的解析器,名称,属性){
全球g_books美元,g_elem美元;
如果($name = = 'book)g_books美元{ } =(阵列);
g_elem美元=美元的名字;
}
功能EndElement($解析器,$name){
全球g_elem美元;
g_elem美元= null;
}
功能的文本数据($解析器,$文本){
全球g_books美元,g_elem美元;
如果($ g_elem = = 'author g_elem美元= 'publisher| | | | { $ g_elem = =标题)
g_books美元{计数($ g_books)至g_elem } = $文本1;
}
}
美元xml_parser_create解析器=();
xml_set_element_handler($解析器,startElement、EndElement);
xml_set_character_data_handler($解析器,TextData);
$ F = fopen(测试。XML,R');
而($data = fread($,4096)){
xml_parse($解析器,$data);
}
xml_parser_free($分析器);
foreach($ g_books达书){
echo $书{标题}。- 'author'} { $书。—;
'publisher'} { echo的书。;
}
*
剧本第一集的g_books数组,它包含了所有的书和书的信息在内存中。的g_elem变量保存正在处理的脚本标签名,然后脚本定义的回调函数。在这个例子中,回调函数不同,endElement和文本数据。当标签被打开和关闭,startElement和EndElement功能称为分别。在开始标签和结束标签之间文本,文本数据称为。
在这个例子中,startElement标签查找图书标签并开始在本阵新的元素。然后,TextData功能着眼于当前的元素是否是一个出版商,标题或作者标签。如果是,函数将当前文本到当前的书。
为了分析继续,这个脚本创建的xml_parser_create功能分析器。然后,设置回调句柄。之后,脚本文件读取和发送文件的批量解析器。在文件读取的功能,xml_parser_free删除解析器的g_books数组的内容是脚本的最后输出。
* /
使用正则表达式解析XML /
复制代码代码如下所示:
=;
$ F = fopen(测试。XML,R');
而($data = fread($,4096)){ $ XML = $数据;}
Fclose($);
preg_match_all( / (。*) /美元美元,XML,书芯);
foreach(合书芯{ 1 } $块){
preg_match_all( / /(。*,美元区块,作者);
preg_match_all( / /(。*,美元块,$标题);
preg_match_all( / /(。*,$区块,$出版商);
回波($标题{ 1 } { 0 }。- $作者{ 1 } { 0 }。—。$发行商{ 1 } { 0 }。);
}
*
我不建议使用正则表达式读取XML,但有时这是最好的方式,因为是兼容的正则表达式函数总是可用的。不要使用正则表达式直接从用户读取XML,因为这类XML的格式或结构不能被控制。你应该从与DOM库或SAX解析器读取XML的用户。
* /
使用xml编写
复制代码代码如下所示:
图书=数组();
$图书(数组{ })
标题= > 'php黑客,
作者= >杰克Herrington,
出版商O'Reilly = >
);
$图书(数组{ })
标题= >播客广播的黑客,
作者= >杰克Herrington,
出版商O'Reilly = >
);
doc =新DOMDocument(美元);
文件-> formatoutput =真美元;
r = $doc -> createElement(书);
为文件-> appendChild(r);
foreach($书书美元){
$ = $doc -> createElement(书);
作者=美元美元DOC -> createElement(作者);
$作者-> appendChild($文件-> createTextNode($书{ 'author ' }));
$ B -> appendChild(合作者);
标题=美元美元DOC -> createElement(标题);
$标题-> appendChild($文件-> createTextNode($书{标题}));
$ B -> appendChild($标题);
出版商=美元美元DOC -> createElement(出版商);
为出版商-> appendChild($文件-> createTextNode($书{ 'publisher ' }));
$ B -> appendChild(美元发行);
$ R -> appendChild($);
}
/ / echo $文件-> savexml();
*
在脚本的顶部,有一些样本书被加载到图书数组中。
在样本加载脚本创建一个新节点添加书籍DOMDocument根了。剧本就创造了每本书的作者,标题,一个节点和出版商,并添加一个文本节点,每个节点的节点。每本书的最后一步是添加一遍书结根。
使用DOM的真正价值在于它创建的XML格式总是正确的,但是如果不能用DOM创建XML又会怎样呢
XML代码
复制代码代码如下所示:
< PHP
PHP写的XML
图书=数组();
$图书(数组{ })
标题= > 'php黑客,
作者= >杰克Herrington,
出版商O'Reilly = >
);
$图书(数组{ })
标题= >播客广播的黑客,
作者= >杰克Herrington,
出版商O'Reilly = >
);
>
< PHP
foreach($书达书)
{
>
< PHP
}
>
在本例中使用的test.xml如下:
复制代码代码如下所示:
Jack Herrington
php黑客
奥赖利
Jack Herrington
播客的黑客
奥赖利