为什么我的XML数据混乱了?

时间:2011-02-07 00:07:16

标签: php xml

我在将XML中的内容导入mysql数据库时遇到问题。 这是代码:

 $objDOM = new DOMDocument('1.0', 'UTF-8');
$objDOM->load("something.xml"); $IAutnr = $objDOM->getElementsByTagName("Data");

现在,在for循环中:

for($i=$t;$i<=$max;$i++) { 

$some= $objDOM->getElementsByTagName("some");
$something = $some->item($i)->nodeValue;
$some2 = $objDOM->getElementsByTagName("some2");
$something2  = $some2->item($i)->nodeValue;

Now put $something and $something2 into the database
}

现在,发生的事情是,在标记“数据”中不存在其中一个元素(某些元素,某些元素...)之前,一切正常。所以他所做的就是从下一个“数据”标签中获取元素,这会混合我的所有数据,所以我的数据库中有数据,实际上并不属于那里。所以我有一个混乱的数据库。 我已经尝试了几个小时来手动更改XML,方法是将缺少的标签放在里面,但是有数千条数据记录,这是不可能的。 所以我需要在我的代码中添加一些东西,这将产生影响,如果标签不存在,只需离开它,不要从下一个“数据”-Tag中取出标签。 我实际上甚至不明白为什么他这样做,为什么他只是跳进下一个“数据”标签?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

我只是在这里猜测你的XML结构的内容,但我想它看起来像

...
<Data>
    <some>a</some>
    <some2>b</some2>
</Data>
<Data>
    <some>c</some>
    <some2>d</some2>
</Data>
...

如果是这种情况,您应该循环遍历Data中的$IAutnr元素集合,例如

for($i = 0, $limit = min($IAutnr->length, $max); $i < $limit; $i++) {
    $data = $IAutnr->item($i);
    $some = $data->getElementsByTagName('some');
    $something = $some->item(0)->nodeValue;

    $some2 = $data->getElementsByTagName('some2');
    $something2 = $some2->item(0)->nodeValue;

    // insert
}

除非您需要DOM库的一些更高级功能,否则我建议您使用SimpleXML。

答案 1 :(得分:0)

这样做是因为你要求它从整个XML结构中提取标记名为“some”和“some2”的元素,这就是它的作用 - 它不仅会查看你想要它的分支因为你永远不会告诉它这样做。修复它的一种方法是查看$ some-&gt;项目($ i) - &gt; parentNode(也可能是该节点的父节点,依此类推),以便正确识别父$ some和$ something2所属的内容。当然,不能保证$ something和$ something2属于同一个父级,除非你的XML在某种程度上保证在同一个分支中不存在或两者都存在。我知道这个解释有点毛茸茸,但这是我能说出来的最佳方式。