在找到了如何使用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”的节点及其内部的所有节点
第二次阅读结束节点并跳到下一个节点时我怎么知道?
答案 0 :(得分:1)
第一:
$reader
还具有name
属性:$reader->name
用于保存节点的名称。检查它并做您需要的事情。
第二:
有一个特殊的常量XMLReader::END_ELEMENT
。检查$reader->nodeType
是否等于它并执行您需要的操作。当然,您可以在检查节点的name
时使用它。
if ($reader->nodeType === XMLReader::END_ELEMENT && $reader->name === 'someTag') {
// do stuff
}