目标:根据一个已知的xml获取一件商品的名字。

   总结:

            处理这个问题的流程已写在了php的注释之中。
            xml学习的过程中要始终把握一切皆节点这一原则,空格换行也不例外。
            根据dom树,根据其节点对应的对象的类型我自己简单的将不同类对象概括为:标签(元素)类型(domElement)、属性类型(domAttribute)、文本节点类型(domeText),和节点列表类型(domnodelist),括号内的红色字体为手册内给出的类,我在此处没有区分大小写。
            根据手册可以发现,他们有很多的相同的属性方法,继承了domnode类。并且有些节点对象不同的属性,可能有相同的值。不同的对象,相同的属性有相同的值。





XML语言: 高亮代码由发芽网提供
01 <?xml version='1.0' encoding = "utf-8" ?>
02 <shop>
03     <goods gid="1">
04         <name>天龙八部</name>
05         <price>12.3</price>
06         <desc> <![CDATA[这是一本好书,>10000人在读]]> </desc>
07     </goods>
08     <goods gid="1">
09         <name>诺基亚</name>
10         <price>999</price>
11         <desc> <![CDATA[这是一部好手机]]> </desc>
12     </goods>
13 </shop>


PHP语言: 高亮代码由发芽网提供
01 <?php
02    //获取一件商品名字
03
04    //1.创建一个空dom对象并将xml加载到内存中
05    header("Content-type: text/html; charset=utf-8");
06    $dom=new DOMdocument("1.0","utf-8"); //DOMDocument Object
07    $dom->load("1.xml");
08
09    //print_r($dom);
10    //2.获取<name>节点列表 document
11    $goods_name = $dom->getElementsByTagName("name");//DOMNodeList Object
12    //print_r($goods_name);
13
14    //3.从列表元素中得到一件商品的名字
15    //DOMNodeList Object有一个属性一个方法
16    /*echo '有'.$goods_name->length.'件商品<br/>';
17    for ($i=0; $i < $goods_name->length; $i++) {
18        echo "<br/><pre>";    
19        print_r($goods_name->item($i)); // $goods_name->item($i)   DOMElement Object
20        echo "</pre>";
21    }
22    */
23
24    $temp = $goods_name->item(0);
25    // echo "<br/><pre>";
26    // print_r($temp);
27    // echo "</pre>";
28  
29    $textnode = $temp->childNodes;
30    //echo "<br/><pre>";
31    //print_r($name);
32    //echo "</pre>";
33
34    //查看textnode每个元素对象的详细信息。
35    // print_r($textnode);
36    // for ($i=0; $i < $textnode->length; $i++) {
37    //     echo "<br/><pre>";
38    //      print_r($textnode->item($i));
39    //     echo "</pre>";
40    // }
41  
42    echo $textnode->item(0)->wholeText.'<br/>';
43    echo $textnode->item(0)->textContent.'<br/>';
44    echo $textnode->item(0)->nodeValue.'<br/>';
45
46    //echo $temp->wholeText.'<br/>';
47    echo var_dump($temp->textContent).'<br/>';
48    echo var_dump($temp->nodeValue).'<br/>';
49
50 ?>