我正在尝试使用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文件中存在新闻标记。
我做错了什么?
致以最诚挚的问候,
伊斯梅尔。
答案 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>