现在需要读取XML文件中一级标签和一级标签内的二级标签的ID,按照XML格式展现<Index Name="哈哈">
<Index Name="呵呵">
<ItemReference Id="1" />
<ItemReference Id="2" />
<ItemReference Id="3" />
<ItemReference Id="4" />
<ItemReference Id="5" />
<ItemReference Id="6" />
<ItemReference Id="7" />
<ItemReference Id="8" />
<ItemReference Id="9" />
<ItemReference Id="10" />
</Index>
<Index Name="拉拉">
<ItemReference Id="1" />
<ItemReference Id="2" />
<ItemReference Id="3" />
<ItemReference Id="4" />
<ItemReference Id="5" />
<ItemReference Id="10" />
</Index>
</Index>想要展示的内容格式如下:
哈哈
呵呵
1
2
3
4
5
6
7
8
9
10
拉拉
1
2
3
4
5
10
用了下段php,无法达到想要的效果,主要是无法区分哪些二级标签属于一级标签<?php$xml = new DOMDocument();// 加载Xml文件
$xml->load('Mall.xml');// 获取所有的Index标签
$user = $xml->getElementsByTagName('Index');// 获取Index标签的数量
$len = $user->length;
$data = array();$item=$xml->getElementsByTagName('ItemReference');
$lens=$item->length;
$datas=array();for($i=0;$i<$len;$i++) {
$data[$i] = array();
//第1个 item 代表 Index标签的 顺序 第2个 item 代表属性的顺序
$data[$i]['name'] = $user->item($i)->attributes->item(0)->nodeValue;
echo $data[$i]['name'];
echo "<br>";
for($s=0;$s<$lens;$s++) {
$datas[$s] = array();
$datas[$s]['Id'] = $item->item($s)->attributes->item(0)->nodeValue;
echo $datas[$s]['Id'];
echo "<br>";
}
}
?>
此PHP展示的结果如下
哈哈
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
呵呵
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
拉拉
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
<Index Name="呵呵">
<ItemReference Id="1" />
<ItemReference Id="2" />
<ItemReference Id="3" />
<ItemReference Id="4" />
<ItemReference Id="5" />
<ItemReference Id="6" />
<ItemReference Id="7" />
<ItemReference Id="8" />
<ItemReference Id="9" />
<ItemReference Id="10" />
</Index>
<Index Name="拉拉">
<ItemReference Id="1" />
<ItemReference Id="2" />
<ItemReference Id="3" />
<ItemReference Id="4" />
<ItemReference Id="5" />
<ItemReference Id="10" />
</Index>
</Index>想要展示的内容格式如下:
哈哈
呵呵
1
2
3
4
5
6
7
8
9
10
拉拉
1
2
3
4
5
10
用了下段php,无法达到想要的效果,主要是无法区分哪些二级标签属于一级标签<?php$xml = new DOMDocument();// 加载Xml文件
$xml->load('Mall.xml');// 获取所有的Index标签
$user = $xml->getElementsByTagName('Index');// 获取Index标签的数量
$len = $user->length;
$data = array();$item=$xml->getElementsByTagName('ItemReference');
$lens=$item->length;
$datas=array();for($i=0;$i<$len;$i++) {
$data[$i] = array();
//第1个 item 代表 Index标签的 顺序 第2个 item 代表属性的顺序
$data[$i]['name'] = $user->item($i)->attributes->item(0)->nodeValue;
echo $data[$i]['name'];
echo "<br>";
for($s=0;$s<$lens;$s++) {
$datas[$s] = array();
$datas[$s]['Id'] = $item->item($s)->attributes->item(0)->nodeValue;
echo $datas[$s]['Id'];
echo "<br>";
}
}
?>
此PHP展示的结果如下
哈哈
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
呵呵
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
拉拉
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
$xpath = new DOMXPath($xml);
$query = '//Index/Index/ItemReference/@Id';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
……
}
for($i=0;$i<$len;$i++) {
$data[$i] = array();
//第1个 item 代表 Index标签的 顺序 第2个 item 代表属性的顺序
$data[$i]['name'] = $user->item($i)->attributes->item(0)->nodeValue;
echo $data[$i]['name'];
echo "<br>";
$xpath = new DOMXPath($xml);
$query = '//Index/Index/ItemReference/@Id';
$entries = $xpath->query($query);
foreach ($entries as $entry) {
echo " {$entry->nodeValue}" ;
echo "<br>";
}
}结果还是一样
哈哈
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
呵呵
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
10
拉拉不能按照XML格式显示数据
<Index Name="哈哈">
<Index Name="呵呵">
<ItemReference Id="1" />
<ItemReference Id="2" />
<ItemReference Id="3" />
<ItemReference Id="4" />
<ItemReference Id="5" />
<ItemReference Id="6" />
<ItemReference Id="7" />
<ItemReference Id="8" />
<ItemReference Id="9" />
<ItemReference Id="10" />
</Index>
<Index Name="拉拉">
<ItemReference Id="1" />
<ItemReference Id="2" />
<ItemReference Id="3" />
<ItemReference Id="4" />
<ItemReference Id="5" />
<ItemReference Id="10" />
</Index>
</Index>
xml;
$xml=simplexml_load_string($string);
foreach($xml->Index as $v){
$attributes= (array)$v->attributes();
$name=$attributes['@attributes']['Name'];
foreach($v->ItemReference as $vl){
foreach($vl->attributes() as $k=> $id) $arr[$name][]=(int)$id;
}
}
print_r($arr);
Array
(
[呵呵] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
) [拉拉] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 10
))
$doc = new DOMDocument;
$doc->load('Mall.xml');$xpath = new DOMXPath($doc);$p = $xpath->query('//Index');
foreach($p as $node) {
$na = $node->attributes->item(0)->nodeValue;
echo "$na<br>";
foreach($xpath->query("//Index[@Name='$na']/ItemReference") as $item)
echo $item->attributes->item(0)->nodeValue . '<br>';
}
哈哈
呵呵
1
2
3
4
5
6
7
8
9
10
拉拉
1
2
3
4
5
10