查询DOMXPath中的错误

时间:2017-01-06 10:25:43

标签: php xml domxpath

我正在尝试使用PHP中的DOMXPath类解析xml文件,但在查询时出现了一些错误。我的XML有这样的东西

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');

$ news长度始终为0,xml文件中存在新闻标记。

我做错了什么?

致以最诚挚的问候,

伊斯梅尔。

2 个答案:

答案 0 :(得分: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”。

答案 1 :(得分: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>