我在将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中取出标签。 我实际上甚至不明白为什么他这样做,为什么他只是跳进下一个“数据”标签?
非常感谢你的帮助!
答案 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在某种程度上保证在同一个分支中不存在或两者都存在。我知道这个解释有点毛茸茸,但这是我能说出来的最佳方式。