PHP XML Reader - 将值放入数组中

时间:2011-05-06 14:59:44

标签: php xmlreader

在上一个问题中,我询问了如何从XML文件中提取值并将它们放入数组中。

PHP xmlreader - values to array question

使用simpleXML时,我无法读取XML文件而不会返回错误。我只能假设XML文件包含一些不良字符,因为使用PHP XMLreader成功读取了文件,编码设置为ISO-8859-1。

理想情况下,我想使用simpleXML,因为循环似乎更简单,但XMLreader似乎有效。

  1. 有没有办法为simpleXML设置XML文件的编码?
  2. 2。如果使用XMLreader,如何修改上一个问题中的代码只有在找到元素中的特定值时才将值添加到数组中?

    示例:来自previous question的当前代码获取所有idusername
    你如何获得身份和用户名only when [ 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>
    

1 个答案:

答案 0 :(得分:3)

除了SimpleXML之外,无法使用UTF-8以外的任何其他内容。但是,由于SimpleXML只是一种使用DOM的简便方法,因此您可以切换为使用DOM。事实上,你想要的东西在DOM中会非常简单。将'%%something%%'更改为您要匹配的内容(例如'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;
        }
    }
?>

请注意: DOMSimpleXML都会将整个文档加载到内存中,然后才能对其进行处理。因此,如果您的文档大于PHP的可用内存(请参阅memory_limit的ini设置),则需要在这些极端情况下使用XMLReader或XMLWriter。

另外请注意,我没有对此进行测试,但它应该非常接近你所需要的。如果您还想要一个XMLReader示例,请告诉我。为我使用DOM只是更快:P