我是用 PHP 使用 XML 的新手。我有一个相当复杂的XML结构,并且在laravel中使用simplexml,并且在访问我需要获取的所有元素时遇到问题。我能够遍历大型 XML 文件,但 simpleXML 每条记录返回两个对象,我似乎只能访问"header"中的元素,返回的第一个对象......
这是 XML 对象的一部分
SimpleXMLElement Object
(
[identifier] => RCM0635
[datestamp] => 2015-06-09
)
SimpleXMLElement Object
(
[lidoWrap] => SimpleXMLElement Object
(
[lido] => SimpleXMLElement Object
(
[lidoRecID] => RCM:1748
[descriptiveMetadata] => SimpleXMLElement Object
(
[objectClassificationWrap] => SimpleXMLElement Object
(
[objectWorkTypeWrap] => SimpleXMLElement Object
(
[objectWorkType] => SimpleXMLElement Object
(
[term] => musical instruments
)
)
[classificationWrap] => SimpleXMLElement Object
(
[classification] => Array
(
[0] => SimpleXMLElement Object
(
[term] => Cornet
)
[1] => SimpleXMLElement Object
(
[conceptID] => SimpleXMLElement Object
(
[@attributes] => Array
(
[type] => SH_Class
)
)
)
)
)
)
使用下面的代码,我可以获取标题中的元素,但我不知道如何获取其他元素?
$streamer = 'Prewk'XmlStringStreamer::createStringWalkerParser(public_path().'/xml/many_mimo_records.xml');
while ($node = $streamer->getNode()) {
$simpleXmlNode = simplexml_load_string($node);
echo (string)$simpleXmlNode->identifier;
echo (string)$simpleXmlNode->datestamp;
}
我将非常感谢任何建议...
我不确定我是否理解你,但在专业:
- 你按照循环
while ($node = $streamer->getNode())
操作,这意味着在第一次迭代后,你会得到这个对象:
SimpleXMLElement Object
(
[identifier] => RCM0635
[datestamp] => 2015-06-09
)
所以第一次可以这样读:
' $simpleXmlNode = simplexml_load_string($node); 回显(字符串)$simpleXmlNode>标识符; 回显(字符串)$simpleXmlNode->日期戳;
'
但在第二次迭代中,您有:
'
SimpleXMLElement Object
(
[lidoWrap] => SimpleXMLElement Object
(
[lido] => SimpleXMLElement Object
(
[lidoRecID] => RCM:1748
[descriptiveMetadata] => SimpleXMLElement Object
(
[objectClassificationWrap] => SimpleXMLElement Object
(
[objectWorkTypeWrap] => SimpleXMLElement Object
(
[objectWorkType] => SimpleXMLElement Object
(
[term] => musical instruments
)
)
[classificationWrap] => SimpleXMLElement Object
(
[classification] => Array
(
[0] => SimpleXMLElement Object
(
[term] => Cornet
)
[1] => SimpleXMLElement Object
(
[conceptID] => SimpleXMLElement Object
(
[@attributes] => Array
(
[type] => SH_Class
)
)
)
)
)
)
'
所以里面的代码是错误的。
我最想尝试这样的事情:
'
while ($node = $streamer->getNode()) {
$simpleXmlNode = simplexml_load_string($node);
if (!empty($simpleXmlNode->identifier))
echo (string)$simpleXmlNode->identifier;
if (!empty($simpleXmlNode->datestamp))
echo (string)$simpleXmlNode->datestamp;
if (!empty($simpleXmlNode->lidoWrap)) {
$lido = $simpleXmlNode->lidoWrap->lido;
echo (string)$lido->lidoRecID;
// and so on as the recursive XML node objects
}
}
'