2017-01-06 52 views
0

我想解析一個xml文件在PHP中使用DOMXPath類,但當我做查詢時,我得到一些錯誤。我的XML有這樣的事情在DOMXPath中查詢錯誤

XML

<?xml version="1.0" encoding="UTF-8"?> 
<news><new><title><!CDATA[bla bla bla]]></title><content><!CDATA[<p>bla bla bla</p>]]></content></new></news> 

DOMXPath

$xml = new DOMDocument(); 
$xml->load($filename); 
$xpath = new DOMXPath($xml); 

$news = $xpath->query('//news'); 

的$消息的長度始終爲0,而​​在XML文件資訊標籤存在。

我在做什麼錯?

此致敬禮,

伊斯梅爾。

回答

1

檢查:

我已經修改了一些你的代碼:

<?php 
    $doc = new DOMDocument; 

    // We don't want to bother with white spaces 
    $doc->preserveWhiteSpace = false; 

    $doc->Load('book.xml'); 

    $xpath = new DOMXPath($doc); 
    // We starts from the root element 
    $query = '//news'; 

    $news = $xpath->query($query); 
    print_r($news); 

?> 

我得到的長度值1

是book.xml

<?xml version="1.0" encoding="UTF-8"?> 
<news><new><title>adsds</title><content>asdsa</content></new></news> 
+0

你做了同樣的錯誤與我...你刪除了CDATA標籤,這就是爲什麼他有錯誤。 – Shirraz

+0

@Shirraz:但由於'CDATA'標籤,我得到'object value ignored'錯誤。 –

+0

是的,導致他的CDATA格式不正確...這就是爲什麼我像你一樣「簡化」他的事情,然後事情就像預期的那樣工作...... CDATA標籤是這裏的問題,而不是查詢(除了詢問「所有根標籤「)... – Shirraz

1

請注意,您正在查詢根標籤(「news」),由於每個XML文件只有一個根標籤,所以這樣做有些無用。實際上,您查詢的內容與query('/news')相同,其長度始終爲「1」。

對於您的問題,請注意您的CDATA格式不正確。它是<![CDATA[blah blah blah]]>,而不是<!CDATA[bla bla bla]](在CDATA之前缺失括號)。

這工作

<?xml version="1.0" encoding="UTF-8"?> 
<news> 
    <new><title><![CDATA[<p>bla bla bla</p>]]></title><content><![CDATA[<p>bla bla bla</p>]]></content></new> 
    <new><title><![CDATA[<p>bla bla bla</p>]]></title><content><![CDATA[<p>bla bla bla</p>]]></content></new> 
    <new><title><![CDATA[<p>bla bla bla</p>]]></title><content><![CDATA[<p>bla bla bla</p>]]></content></new> 
</news> 

PHP腳本

<?php 
$xml = new DOMDocument(); 
$xml->load('./test.xml'); 
$xpath = new DOMXPath($xml); 

$news = $xpath->query('//new'); 

var_dump($news->length); 

完美返回 「3」。

+0

裏面' '我有一些''標記,如果我查詢'('//新')'也得到長度= 0。 –

+0

更新了我的答案,起初我用簡單的字符串替換了你的CDATA ...壞主意,我錯過了你畸形標記; ) 這就是爲什麼它起初爲我工作的原因;) – Shirraz