simplexmlphp
❶ php解析報錯simplexml_load_string()
你的xml字元串格式不對,標簽都沒有結束,肯定要報錯的。xml裡面的標簽都必須要有結束標簽,但標簽也必須使用/>表示蔽仿結束。
改成下面的試試:
$xml_str2 ='<?xml version="1.0" encoding="utf-8"?><response><code>0009</code><msg>號碼:18978765456;運營商:聯通;地閉缺區:北京 ;產品已停用</msg></轎並辯response>';
❷ php創建SimpleXML對象問題
你的原文本是UTF8,裡面XML用GB2312,這樣肯定會有沖突,改為UTF8試試看。
❸ PHP中用simpleXML解析XML文檔,為什麼總出錯
你說的「而且單個測試都沒問題」只是抽樣測試,並不是測試全部。應該有至少一個XML格式是不正確的。如果你加了我的代碼,應該會輸出這個不正確的XML的內容。你把這個內容貼出來給你看看,沒有什麼機密吧?如果可以的話,加網路HI。賬號:everalan
你加我的代碼後,有執行到die($xml)這一行嗎?有的話把輸出的XML內容發過來幫你分析一下
應該是XML本身的格式就不正確,自然解析失敗
try{
$xmld = new SimpleXMLElement($xml);
}catch(Exception $e){
die($xml);
}
這樣出錯的時候就能知道那個XML是什麼內容就知道哪裡錯了
❹ 如何用php給XML字元串的子節點添加屬性
xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<clientSet>
<server url="192.168.0.180" port="1935" />
<rootPath value="" />
<homePath value="ht.com" />
<helpPath value="help.html" />
<language value="en" />
<theme value="default" />
<visibleMarquee value = "true" />
<visibleWhitePaper value="true" />
<showMemberRoomForGuest value = "true" />
<emotions enabled="true" column="5" autoPlay="false">
<item name="Birthday" src="cartoon/movie/birthday.swf" thumb="cartoon/preview/birthday-small.swf" ration="15"/>
<item name="Boom" src="cartoon/movie/boom.swf" thumb="cartoon/preview/boom-small.swf" ration="6"/>
<item name="Bubble" src="cartoon/movie/bubble.swf" thumb="cartoon/preview/bubble-small.swf" ration="7.5"/>
<item name="Cry" src="cartoon/movie/cry.swf" thumb="cartoon/preview/cry-small.swf" ration="5.4"/>
<item name="Doggie" src="cartoon/movie/doggie.swf" thumb="cartoon/preview/doggie-small.swf" ration="13"/>
<item name="Greeting" src="cartoon/movie/greeting.swf" thumb="cartoon/preview/greeting-small.swf" ration="7.4"/>
<item name="Football" src="cartoon/movie/football.swf" thumb="cartoon/preview/football-small.swf" ration="2.2"/>
</emotions >
</clientSet>
php代碼:
<?
$dom=new DOMDocument('1.0');
$dom->load('x.xml');
$em=$dom->getElementsByTagName('emotions');
$em=$em->item(0);
$items=$em->getElementsByTagName('item');
foreach($items as $a){
foreach($a->attributes as $b){
if($b->nodeValue=='Birthday'){
$a->setAttribute('name','nBirthday');
}
}
}
$t=$dom->createElement('item');
$t->setAttribute('name','x');
$t->setAttribute('src','www..com');
$t->setAttribute('ration','ration');
$em->appendChild($t);
$dom->save('x.xml');
?>
PHP解析XML文檔屬性並編輯:
<?php
//讀取xml
$dom=new DOMDocument('1.0');
$dom->load('data.xml');
$em=$dom->getElementsByTagName('videos');//最外層節點
$em=$em->item(0);
$items=$em->getElementsByTagName('video');//節點
//如果不用讀取直接添加的話把下面這一段去掉即可
foreach($items as $a){
foreach($a->attributes as $b){//$b->nodeValue;節點屬性的值$b->nodeName;節點屬性的名稱
echo $b->nodeName;
echo ":";
echo $b->nodeValue;
echo "<br/>";
}
}
//下面是往xml寫入一行新的
$t=$dom->createElement('video');//<video
$t->setAttribute('title','1');//<video name="data"
$t->setAttribute('src','2');//<video name="data" src="2"
$t->setAttribute('img','1');//<video name="data" img="1"
$em->appendChild($t);//<video name="data" img="1"/>
$dom->save('data.xml');
?>
當時的xml文檔:
<?xml version="1.0"?>
<videos>
<video img="a" url="1" title="1" nickname="1" tag="1" vid="1" star="1"/>
<video img="b" url="2" title="2" nickname="2" tag="2" vid="2" star="2"/>
<video img="c" url="3" title="3" nickname="3" tag="3" vid="3" star="3"/>
<video title="d" src="2" img="1"/>
</videos>
//下面這一個文件是後改的可以修改xml:
<?php
$doc = new DOMDocument();
$doc->load('data.xml');
//查找 videos 節點
$root = $doc->getElementsByTagName('videos');
//第一個 videos 節點
$root = $root->item(0);
//查找 videos 節點下的 video 節點
$userid = $root->getElementsByTagName('video');
//遍歷所有 video 節點
foreach ($userid as $rootdata)
{
//遍歷每一個 video 節點所有屬性
foreach ($rootdata->attributes as $attrib)
{
$attribName = $attrib->nodeName; //nodeName為屬性名稱
$attribValue = $attrib->nodeValue; //nodeValue為屬性內容
//查找屬性名稱為ip的節點內容
if ($attribName =='img')
{
//查找屬性內容為ip的節點內容
if ($attribValue =='1')
{
//將屬性為img,img內容為1的修改為image;
$rootdata->setAttribute('img','image');
$doc->save('data.xml');
}
}
}
}
?>
❺ php的simplexml_load_string函數的幾個參數解析,求解!謝謝!
$class_name默認脊攔是SimpleXMLElement
是一個對象名,也可以自定義,但是必須是自定義的類必須是SimpleXMLElement的子類,也就是櫻碰胡繼承!
simplexml_load_string是把結果存於該對象,並把該對象放回
例子:
classa{
public$aa;
}
functionb($c,$d='a'){
$a=new$d();
$a->aa=$c;
return吵叢$a;
}
//使用
$e=b('1234567890',a);
echo$e->aa;
❻ PHP使用DOM和simplexml讀取xml文檔的方法示例
本文實例講述了PHP使用DOM和simplexml讀取xml文檔的方法。分享給大家供大家參考,具體如下:
實例
用DOM獲取下列xml文檔中所有金庸小說的書名,該xml文檔所在位置為
./books.xml:
<?xml
version="1.0"
encoding="utf-8"?>
<root>
<book>
<title>天龍八部</title>
<author>金庸</author>
</book>
<book>
<title>陸小鳳</title>
<author>古龍</author>
</book>
<book>
<title>倚天屠龍記</title>
<author>金庸</author>
</book>
<book>
<title>西遊記</title>
<author>吳承恩</author>
</book>
<book>
<title>神鵰俠侶</title>
<author>金庸</author>
</book>
<book>
<title>射鵰英雄傳</title>
<author>金庸</author>
</做穗book>
</root>
用DOM代碼實現:
DOM讀取xml文檔步驟:1、創建DOM對象——》2、載入DOM文檔內容——》3、截取要讀取內容所在的標簽——》獲得要讀取的內容。
header('Content-type:text/html;charset=utf-8');
$arr=array();
$dom
=
new
DOMDocument();//創建DOM對象
$dom->load('./books.xml');//載入xml文檔
print_r($dom);
echo
'<hr>';
$dom
=
$dom->getElementsByTagName('book');//截取標簽
for($i=0;$i<$dom->length;$i++){
if($dom->item($i)->childNodes->item(1)->childNodes->item(0)->wholeText=='金庸'){
$arr[]
=
$dom->item($i)->childNodes->item(0)->childNodes->item(0)->wholeText.'<br
/>';//獲取內容
}
}
print_r($arr);
使用
getElementsByTagName
和
childNodes
後返回的都是對象,所以它們後面必須使用
item(int),哪怕它們返回的對象裡面只包含一個項目,也必須用item(0)來指定,否則就會出錯。
用simplexml代碼實現:
$simxml
=
simplexml_load_file('./books.xml');
$t
=
$simxml->book;
$arr=array();
foreach
($t
as
$v){
if($v->author=='金庸'){
$arr[]
=
(string)$v->title;
}
}
print_r($arr);
使用
simplexml_load_file
後返回的是對象,該對象里的項目既有對象又有數組,不管是對象還是數組,要循環裡面的內容都可以用
foreach。該實例最後獲取的內容
$v->title
其實是個對象,所以首胡逗要用
string
轉化為字元串。
PS:這里再為大家提供幾款關於xml操作的在線工具供大家參考使用:
在線XML/JSON互相轉換工具:
http://tools.jb51.net/code/xmljson
在線格式化XML/在線壓縮XML:
http://tools.jb51.net/code/xmlformat
XML在線壓縮/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代碼在線格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
更多關於PHP相關內容感興趣的讀者可查看本站專題:《PHP針對XML文件操作技巧總結》、《PHP數組(Array)操作技巧大全》、《php字元串(string)用法總結》、《PHP錯誤與異常處理方法總結》、《PHP基本語法入門教程》、《php面向對象程序設計入門教程》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家PHP程序者賣設計有所幫助。
❼ PHP SimpleXML怎麼創建cdata
可以蔽虛胡解析,如下:
http://hi..com/yinqinlong502/item/e4dfc900a977ed1acc34eae9
php 解析xml遇到cdata怎麼辦
用$rss = simplexml_load_file ( '11111.xml', 'SimpleXMLElement', LIBXML_NOCDATA );哎就為了這么個函數宏攔我還去寫正則准備替換了,白白廢了譽鉛我兩小時,shit!!!以後多注意下那些函數的可選參數吧。長點教訓.
直接輸入xml內容為參數的也支持CDATA的解析,如下:
view plainprint?
$rss = simplexml_load_file ( '11111.xml', 'SimpleXMLElement', LIBXML_NOCDATA );
$xmlCode = simplexml_load_string($this->xmlContents, 'SimpleXMLElement', LIBXML_NOCDATA);