XML阅读器并跳过某些节点

时间:2018-09-17 11:34:40

标签: php xml

在找到了如何使用XMLreader读取每个XML节点和值之后,我遇到了另一个问题。

我正在这样做:

    $tablename = 'my_table_name';
    $reader = new XMLReader;
    $reader->xml($MyXml);
    while($reader->read()) {

        if($reader->nodeType === XMLReader::ELEMENT) {


            if(CheckIFfieldExist($tablename, str_replace(':', '', $reader->name)) == 1){

                $name = str_replace(':', '', $reader->name);
                $reader->read();
                $val = (string)$reader->value;

                    $arrayfield[] = $name;
                    $arrayvalue[] = $val;

                echo $name.' --> '.$val.'<hr>';
            }

        }
    }

工作正常,这里的功能CheckIFfieldExist

function CheckIFfieldExist($table, $field){ 
    $var = 0;
    $result = mysql_query("SHOW COLUMNS FROM $table LIKE '$field'");
    $exists = (mysql_num_rows($result))?TRUE:FALSE;
    if($exists) {$var = 1;}
    return $var;
}

在这里您可以看到我的XML xml example

我有2个问题 首先,我将只读取一个名为“ AttributeSets”的节点及其内部的所有节点

第二次阅读结束节点并跳到下一个节点时我怎么知道?

1 个答案:

答案 0 :(得分:1)

第一$reader还具有name属性:$reader->name用于保存节点的名称。检查它并做您需要的事情。

第二: 有一个特殊的常量XMLReader::END_ELEMENT。检查$reader->nodeType是否等于它并执行您需要的操作。当然,您可以在检查节点的name时使用它。

if ($reader->nodeType === XMLReader::END_ELEMENT && $reader->name === 'someTag') {
    // do stuff
}