【发布时间】:2014-07-25 03:08:15
【问题描述】:
如何使用 PHP DOM 将 sample_id 值连同 first 和 samples 一起推送到数组中?
我尝试添加另一个 foreach 循环,但我收到了各种通知,例如
Trying to get property of non-object
XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<maintable>
<group>
<first>text1</first>
<second>text2</second>
<samples a="link" b="link">
<sample_id>000555</sample_id>
</samples>
</group>
<group>
<first>text3</first>
<second>text4</second>
<samples a="link" b="link">
<sample_id>111000</sample_id>
</samples>
</group>
</maintable>
PHP
<?php
$text = file_get_contents($file);
$content = iconv('UTF-8', 'UTF-8//IGNORE', $text);
$xml = new DOMDocument('1.0', 'ISO-8859-1');
$xml->loadXML($content);
$xpath = new DOMXPath( $xml );
$query = '/maintable/group[first="text3"]';
$nodes = $xpath->query( $query );
$var = array();
foreach( $nodes as $k => $node )
{
foreach( $node->childNodes as $cnode )
{
if ($cnode->nodeName == 'first')
{
$var[$k]["first"] = (string)$cnode->textContent;
}
if ($cnode->nodeName == 'samples')
{
$var[$k]["samp_url"] = (string)$cnode->getAttribute("a");
}
if ($cnode->nextSibling->nodeName == 'sample_id')
{
$var[$k]["sample_id"] = (string)$cnode->nextSibling->textContent;
}
}
}
//print_r($cnode->childNodes);
?>
尝试通过 nodeList 循环
$var = array();
$nodes = $xpath->evaluate('/maintable/group[first="text3"]');
foreach ($nodes as $node)
{
foreach( $node->childNodes as $cnode )
{
if (is_array($cnode))
{
foreach( $cnode->childNodes as $cn )
{
$var[]["sample_id"] = (string)$cn->textContent;
}
}
}
}
var_dump($var);
【问题讨论】:
-
首先,您的查询看起来不对。