现在需要读取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

解决方案 »

  1.   

    既然能写出那么多,顺便去看看xpath,添两三行代码而已
      

  2.   

    ……
    $xpath = new DOMXPath($xml);
    $query = '//Index/Index/ItemReference/@Id';
    $entries = $xpath->query($query);
    foreach ($entries as $entry) {
        ……
    }
      

  3.   


    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格式显示数据
      

  4.   

    可以用SimpleXML函数,这个可以获取指定结点的
      

  5.   

    $string=<<<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
            ))
      

  6.   

    我复制代码,运行了下,结果如下:Array ( [] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 [10] => 1 [11] => 2 [12] => 3 [13] => 4 [14] => 5 [15] => 10 ) )
      

  7.   

    用 xpath 比较简单
    $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