0

最近我从这里了解到如何在 PHP 中使用 XMLReader 和 SimpleXML 解析大型 xml 文件。我试图将上述教程的代码改编成我的 php 程序,如下所示:

$xml_url = "http://localhost/rest/server.php?wstoken=".$token&function=contents";
    $reader = new XMLReader;
    $reader->open($xml_url);

    while($reader->read()){
        if($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'SINGLE'){
            $doc = new DOMDocument('1.0','UTF-8');
            $xml = simplexml_import_dom($doc->importNode($reader->expand(), true));
            //$titleString = (string) $xml->description;
            echo $xml->description;
        }
    }

通过 url 调用的 XML 文件是这样的(xml 版本在这里): 截屏

其他 SINGLE 标签(标有“红色”)具有相同的结构,我也想打印它们的“描述”。

上面提到的 php 程序的输出是:第 1 行第 1 列的错误:文档末尾的额外内容。任何帮助都会很棒。

4

1 回答 1

1

SimpleXML功能应该足够了:

$xml=simplexml_load_file('http://dl.dropbox.com/u/72519118/response.xml');
var_dump($xml->xpath('//SINGLE/KEY[@name="description"]/VALUE/text()'));

上述var_dump输出:

array(3) {
  [0]=>
  object(SimpleXMLElement)#2 (1) {
    [0]=>
    string(1703) "<div class="no-overflow">..."
  }
  [1]=>
  object(SimpleXMLElement)#3 (1) {
    [0]=>
    string(9906) "<div class="no-overflow">..."
  }
  [2]=>
  object(SimpleXMLElement)#4 (1) {
    [0]=>
    string(4114) "<div class="no-overflow">..."
  }
}

请注意,标签名称xpath()区分大小写,因此'//single/key...'不起作用。

加法

在 SimpleXML 中检索文本值的“标准”方法是$KEY->VALUE

但是,如果您已经到达 XML 树的“结束”节点(就像我在 XPath 中所做的那样),您可以简单地将其类型转换为字符串以获取值:

$xml=simplexml_load_file('http://dl.dropbox.com/u/72519118/response.xml');
$result=$xml->xpath('//SINGLE/KEY[@name="description"]/VALUE/text()');
foreach($result as $text)
{
    var_dump((string)$text);
}

上述输出:

string(1703) "<div class="no-overflow"><p>..."
string(9906) "<div class="no-overflow"><h3>..."
string(4114) "<div class="no-overflow"><h3>..."
于 2013-01-23T03:48:30.830 回答