【问题标题】:Skip elements using xmlreader php使用 xmlreader php 跳过元素
【发布时间】:2015-03-02 19:19:57
【问题描述】:

我正在使用 xmlReader 来解析一个大的 xml 文件(~100mb)。像这样的

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <products>
        <product>
            <element_1>foo</element_1>
            <element_2>foo</element_2>
            <element_3>foo</element_3>
            <element_4>foo</element_4>
        </product>
        <product>
            <element_1>bar</element_1>
            <element_2>bar</element_2>
            <element_3>bar</element_3>
            <element_4>bar</element_4>
        </product>
        <product>
            <element_1>bar</element_1>
            <element_2>bar</element_2>
            <element_3>bar</element_3>
            <element_4>bar</element_4>
        </product>
        <product>
            <element_1>bar</element_1>
            <element_2>bar</element_2>
            <element_3>bar</element_3>
            <element_4>bar</element_4>
        </product>
        <product>
            <element_1>bar</element_1>
            <element_2>bar</element_2>
            <element_3>bar</element_3>
            <element_4>bar</element_4>
        </product>
    </products>

我们如何跳过前两棵树并移动到第三棵?

【问题讨论】:

  • 跳过前 2 个产品树* :)

标签: php xmlreader skip


【解决方案1】:

XMLReader 逐行遍历您的文件。由于您的 xml 文件中没有任何标识符(属性),您只能通过使用“next()”跳过产品 1 和 2 来使用修复解决方案:

$xmlReader = new XMLReader;

// try to open
if (!$xmlReader->open($file)) {
    die("Failed to open file");
}

// read the file
while($xmlReader->read()) {

    // skip 1st product
    if($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == "product") {$xmlReader->next("product");}
    // skip 2nd product
    if($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == "product") {$xmlReader->next("product");}

    // start reading
    if($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == "product") {
        // use your code here

        // personally I like using simplexml from here since its easier to work with and the nodes are usually small enough
        $node = simplexml_load_string($xmlReader->readOuterXML());

        // use it
        $myNewElement1 = $node->element_1;
        $myNewElement2 = $node->element_2;
        $myNewElement3 = $node->element_3;
        $myNewElement4 = $node->element_4;
    }
}

也可以去http://php.net/manual/en/xmlreader.next.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多