2017-01-06 47 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