关于xmlreader:PHP XML Reader-将值放入数组

 2021-04-18 

PHP XML Reader - Put Values into Array

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

PHP xmlreader-数组问题的值

使用simpleXML时,我无法读取XML文件而没有返回错误。我只能假定XML文件包含一些错误字符,因为该文件已成功用PHP XMLreader读取,并将编码设置为ISO-8859-1。

理想情况下,我想使用simpleXML,因为循环看起来更简单,但是XMLreader似乎可以工作。

  • 有没有一种方法可以为simpleXML设置XML文件的编码?
  • 2。如果使用XMLreader,仅当在元素中找到特定值时,如何才能修改上一个问题将代码添加到数组中的代码?

    示例:上一个问题的当前代码获取所有idusername
    您如何获取ID和用户名only when [ title ] = value

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- XML File -->
    <?xml version="1.0" encoding="UTF-8"?>
    <working version="2.0">
    <group name="test">
        <userdata>
            data
            <id>data</id>
            <username>data</username>
                </userdata>
         </group>
    </working>

    除了将UTF-8与SimpleXML一起使用外,没有其他方法可以使用。但是,由于SimpleXML是使用DOM的更简单方法,因此您可以改用DOM。实际上,您想要的在DOM中将非常简单。将'%%something%%'更改为要匹配的内容(例如'administrator')。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?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;
            }
        }
    ?>

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

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