【问题标题】:Can't access more than the first child node of its parent when parsing XML解析 XML 时不能访问超过其父节点的第一个子节点
【发布时间】:2012-08-15 08:46:19
【问题描述】:

我的 XML 节点结构是如何工作的,我有多个父元素的子元素,它们也出现多次。我能够访问子元素,但只能访问每个父元素的第一个元素。我还尝试将子元素中的数据插入 MySQL。在第一个元素之后,我似乎无法访问任何子元素。当我回显count() 时,我可以获得每个重复出现的父级的子元素的总数,但我似乎无法使用该数据。解析 XML 对我来说相当新,我的 PHP 有点生疏,所以请原谅我。我没有得到什么?

注意:我关心的数据在 mt 节点中。 mt 节点的直接父节点是 mi 节点。

$string = file_get_contents('file1.xml');
$xml = new SimpleXMLElement($string);

foreach ($xml->md as $mt_tag) {
    if (isset($mt_tag->mi->mt)) {
        $query = "INSERT INTO xmlData(
                xml_data
                ) VALUES (
                '{$mt_tag->mi->mt}'
                )";
        mysql_query($query, $connection);
        echo count($mt_tag->mi->mt);
        echo "<br />";
    } else {
        echo "<p>Creation Failed.<p>";
        echo "<p>" . mysql_error() . "</p>";
    }
}

【问题讨论】:

  • 你确定 MySQL 支持 xmlData() 吗?我认为这可能只是 SQL Server(我可能是错的,但在快速搜索中没有看到任何关于它的内容)...
  • 我还建议您在此处尝试使用一些示例 XML
  • @Brett 我认为应该没问题,因为我关心的数据只是一串字母字符。我还可以插入来自父母的第一个孩子的字符串,之后就不行了。

标签: php mysql xml xml-parsing


【解决方案1】:

您在 mt 节点上缺少一个 for 循环:

foreach ($xml->md as $md_tag) {
       if (isset($md_tag->mi->mt)) {

              foreach ($md_tag->mi->mt as $mt) {
                    //do something
              }
       }
}

请务必更改不一致的内容

foreach ($xml->md as $mt_tag) {

foreach ($xml->md as $md_tag) {

【讨论】:

  • 谢谢,效果很好!我一直在子节点上绊倒。我一直在尝试解决这个问题,就这么简单。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多