Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP XML读取器-将值放入数组_Php_Xmlreader - Fatal编程技术网

PHP XML读取器-将值放入数组

PHP XML读取器-将值放入数组,php,xmlreader,Php,Xmlreader,在前面的一个问题中,我问了如何从XML文件中提取值并将其放入数组中 在使用simpleXML时,如果没有返回错误,我无法读取XML文件。我只能假设XML文件包含一些错误字符,因为该文件是使用PHP XMLreader成功读取的,编码设置为ISO-8859-1 理想情况下,我希望使用simpleXML,因为循环似乎更简单,但XMLreader似乎可以工作 有没有办法为simpleXML设置XML文件的编码 2。如果使用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:My
    XMLReader::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;
            }
        }
    ?>