【问题标题】:xml php DOM get each parent node from loopxml php DOM从循环中获取每个父节点
【发布时间】:2015-03-20 21:22:45
【问题描述】:

我有类似的 XML 文件

<tag>
    <item>
        <id>106</id>
        <title>DG</title>
    </item>
    <item>
        <id>105</id>
        <title>AC</title>
    </item>
</tag>

如何将每个项目的 id 和标题标签名称放在单独的数组中

<?php
$xml = '<tag>
    <item>
        <id>106</id>
        <title>DG</title>
    </item>
    <item>
        <id>105</id>
        <title>AC</title>
    </item>
</tag>';

$dom = new DomDocument();
// $dom->load('xml.xml');
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

$ExTagsArr = array();
foreach ($xpath->evaluate('//item/*') as $i=>$ExTagArr) {
$ExTagsArr[]=$ExTagArr->nodeName;

print_r($ExTagsArr);
}

我得到了奇怪的数组

数组 ( [0] => id) 数组 ( [0] => 身份证 [1] => 标题) 数组 ( [0] => 身份证 [1] => 标题 [2] => id) 数组 ( [0] => 身份证 [1] => 标题 [2] => 身份证 [3] => 标题)

但我只需要得到

Array
(
    [0] => id
    [1] => title
)
Array
(
    [0] => id
    [1] => title
)

【问题讨论】:

  • 只需使用$i 不需要那个if 语句,然后在echo 上连接$i
  • 哦,好吧,所以您正在尝试针对每个项目子项。相当混乱,无论如何很高兴结果很好

标签: php xml loops dom foreach


【解决方案1】:
<?php

$xml = '
<tag>
    <item>
    <id>106</id>
    <title>DG</title>
    </item>
    <item>
    <id>105</id>
    <title>AC</title>
    </item>
</tag>
';

$dom = new DomDocument();
$dom->loadXML($xml);

// Using SimpleXML
$root = simplexml_import_dom($dom);
foreach ($root->xpath('//item') as $item) {
    $a = (array) $item;
    var_dump($a);
}

// Using plain DOM
foreach ($dom->getElementsByTagName('item') as $item) {
    $a = array();
    for ($i = 0; $i < $item->childNodes->length; ++$i) {
        $child = $item->childNodes->item($i);
        if ($child->nodeType == XML_ELEMENT_NODE) {
            $a[$child->tagName] = $child->nodeValue;
        }
    }
    var_dump($a);
}

也可以看看this的回答。

【讨论】:

  • 它 simpleXml 但我需要 Dom
  • 没关系,但你为什么使用if ($child-&gt;nodeType == XML_ELEMENT_NODE) {iget ["id"]=&gt;string(3) "106" 如何删除类型参数 string(3)
  • 因为标签之间的空间(&lt;item&gt;&lt;id&gt;)实际上是XML_TEXT_NODE。此外,还可以发表评论。使用 DOM 时,您需要考虑这些细节。为了只获取密钥(idtype),请使用 array_keys($a)
  • 请帮我解决这个问题stackoverflow.com/questions/28085473/…
猜你喜欢
  • 2011-06-06
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多