PHP XML读取器-将值放入数组
在前面的一个问题中,我问了如何从XML文件中提取值并将其放入数组中 在使用simpleXML时,如果没有返回错误,我无法读取XML文件。我只能假设XML文件包含一些错误字符,因为该文件是使用PHP XMLreader成功读取的,编码设置为ISO-8859-1 理想情况下,我希望使用simpleXML,因为循环似乎更简单,但XMLreader似乎可以工作PHP XML读取器-将值放入数组,php,xmlreader,Php,Xmlreader,在前面的一个问题中,我问了如何从XML文件中提取值并将其放入数组中 在使用simpleXML时,如果没有返回错误,我无法读取XML文件。我只能假设XML文件包含一些错误字符,因为该文件是使用PHP XMLreader成功读取的,编码设置为ISO-8859-1 理想情况下,我希望使用simpleXML,因为循环似乎更简单,但XMLreader似乎可以工作 有没有办法为simpleXML设置XML文件的编码 2。如果使用XMLreader,如何修改我前面问题中的代码?只有在元素中找到特定值时,才能
id
和username
只有当[title]=value
<!-- XML File -->
<?xml version="1.0" encoding="UTF-8"?>
<working version="2.0">
<group name="test">
<userdata>
<title>data</title>
<id>data</id>
<username>data</username>
</userdata>
</group>
</working>
数据
数据
数据
除了UTF-8之外,没有其他方法可以将其用于。然而,因为这只是一种更容易使用的方法,所以您可以改为使用。事实上,你想要的是非常简单的。将'%%something%%'
更改为您想要匹配的内容(例如'administrator'
)
load(“path/to/file.xml”);
$xpath=newdomxpath($xml);
$nodes=$xpath->query(“/working/group/userdata[title='%%something%%'”);
$array=array();
foreach($k=>$node的节点)
{
foreach($node->childNodes作为$cnode)
{
$array[$k][$cnode->nodeName]=$cnode->textContent;
}
}
?>
请注意:在他们能够对整个文档进行处理之前,请同时将其加载到内存中。因此,如果您的文档大于PHP的可用内存(请参见内存限制的ini设置),则在这些极端情况下,您需要使用XMLReader或XMLWriter
另外请注意,我没有测试这个,但它应该非常接近你需要的。如果您还想要一个XMLReader示例,请告诉我。对我来说,使用DOM更快:一个XMLReader示例会很有趣。有人建议使用xml\u set\u对象。我真的不知道在使用解析器/读取器提取特定元素的情况下该如何工作。谢谢您提供的DomXPath示例。@rrfusco:MyXMLReader::foo
有点生疏。但是,根据您之前的回答,我的直接猜测是您需要像当前一样读取xml,但需要将数据存储到临时数组中。然后,在获得当前的用户数据后,检查$tmp['title']=='administrator'
,如果是,则将该数据保存到主数据数组中。这有意义吗?
<?php
$xml = new DOMDocument( "1.0", "ISO-8859-1" );
$xml->load("path/to/file.xml");
$xpath = new DOMXPath( $xml );
$nodes = $xpath->query( "/working/group/userdata[ title = '%%something%%' ]" );
$array = array();
foreach( $nodes as $k => $node )
{
foreach( $node->childNodes as $cnode )
{
$array[ $k ][ $cnode->nodeName ] = $cnode->textContent;
}
}
?>