Heim >Backend-Entwicklung >PHP-Tutorial >XML-DOM in PHP (10)

XML-DOM in PHP (10)

WBOY
WBOYOriginal
2016-08-08 09:27:421021Durchsuche

1.PHP DOM (1)

Das DOM in PHP unterscheidet sich von Javascript und es ist nicht erforderlich, einen weiteren Knoten für Attribute hinzuzufügen

2. Hauptkategorien

DOMDocument: Dokumentklasse

DOMNodeList: Knotenlistenklasse

DOMNode: Knotenklasse

DOMElement: Elementklasse

3. DOMDocument-Klasse

3.1 Dokumentobjekt erstellen

DOMDocument::__construct ([ string $version [, string $encoding ]] )

[ string $version: Versionsnummer

 [, string $encoding ]]: Zeichensatz

3.2. XML-Datei laden

gemischtes DOMDocument::load ( string $filename)

string $filename: der Name der zu ladenden XML-Datei

3.3. Knoten erhalten

DOMNodeList DOMDocument::getElementsByTagName ( string name )

String-Name: Der abzurufende Knotenname

Beispiel: Demo.php

<?<span>php
    header ( </span><span>'</span><span>Content-Type:text/html;charset=gb2312</span><span>'</span><span> );
</span><span>//</span><span> 利用php解析demo01.xml
</span><span>//</span><span> 实例化dom对象</span>
    $dom = <span>new</span><span> DOMDocument ();
</span><span>//</span><span> 加载xml文件</span>
    $dom->load ( <span>'</span><span>demo01.xml</span><span>'</span><span> );
</span><span>//</span><span> 通过dom对象获取person节点,注意:这里返回值是一个DOMNodeList类对象</span>
    $persons = $dom->getElementsByTagName ( <span>'</span><span>person</span><span>'</span><span> );
</span><span>//</span><span> 共有几个person</span>
    echo <span>'</span><span>共有</span><span>'</span> . $persons->length . <span>'</span><span>个人<br></span><span>'</span>;      <span>//</span><span>输出共有两个人
</span><span>//</span><span> 选中索引为0的person,也就是第一个人</span>
    $person = $persons->item ( <span>0</span><span> );
</span><span>//</span><span> 在这个person下获取name节点,返回的仍然是一个DOMNodeList类对象</span>
    $names = $person->getElementsByTagName ( <span>'</span><span>name</span><span>'</span><span> );    
</span><span>//</span><span> 输出姓名</span>
echo $names->item ( <span>0</span> )->nodeValue . <span>'</span><span><br></span><span>'</span>;       <span>//</span><span>输出'张三'</span>
为什么要进行两次取的Nodelist呢?请参照上图,因为有两个节点

demo.xml

<?xml version=<span>"</span><span>1.0</span><span>"</span> encoding=<span>"</span><span>UTF-8</span><span>"</span>?>
<persons>
    <person id=<span>"</span><span>s101</span><span>"</span>>
        <name>zhangsan</name>
        <age><span>30</span></age>
    </person>
    <person>
        <name>wangwu</name>
        <age><span>18</span></age>
    </person>
</persons>

4. DOMNodeList-Klasse (die Person oben ist der NodeList-Knoten)

1. Länge

Wie viele Knoten gibt es in der aktuellen Knotenliste

2. DOMElement DOMNodelist::item (int $index)

Wählen Sie den Knoten mit dem Indexindex

aus

int $index:index

5. DOMNode-Klasse

1. nodeValue Knotenwert

6. Über Leseattribute

1. bool DOMElement::hasAttribute (string $name)

Bestimmen Sie, ob es ein bestimmtes Attribut hat (beurteilen Sie nur, ob es ein bestimmtes Attribut gibt)

String $name:Attributname

2. bool DOMNode::hasAttributes (void)

Bestimmen Sie, ob es Attribute hat (geben Sie true zurück, solange Attribute vorhanden sind)

3. string DOMElement::getAttribute ( string $name )

Rufen Sie den Attributwert des angegebenen Attributs ab

String $name: Attributname

Beispiel 2. Ausgabe mit kohärenten Operationen

<?<span>php
    $dom </span>= <span>new</span> DOMDocument ( <span>'</span><span>1.0</span><span>'</span>, <span>'</span><span>utf-8</span><span>'</span><span> );
    $dom</span>->load ( <span>'</span><span>demo01.xml</span><span>'</span><span> );
</span><span>//</span><span> 想得到第一个人的姓名</span>
    echo $dom->getElementsByTagName ( <span>'</span><span>person</span><span>'</span> )->item ( <span>0</span><span> )
    </span>->getElementsByTagName ( <span>'</span><span>name</span><span>'</span> )->item ( <span>0</span> )-><span>nodeValue;
输出:张三</span>

Beispiel3:

<?<span>php
    header ( </span><span>'</span><span>Content-Type:text/html;charset=gb2312</span><span>'</span><span> );
    $dom </span>= <span>new</span> DOMDocument ( <span>'</span><span>1.0</span><span>'</span>, <span>'</span><span>utf-8</span><span>'</span><span> );
    $dom</span>->load ( <span>'</span><span>demo01.xml</span><span>'</span><span> );
    $person </span>= $dom->getElementsByTagName ( <span>'</span><span>person</span><span>'</span> )->item ( <span>0</span><span> );
</span><span>//</span><span> 判断节点是否具有id属性</span>
    <span>if</span> ($person->hasAttribute ( <span>'</span><span>id</span><span>'</span><span> )) {
        echo </span><span>'</span><span>具有id属性</span><span>'</span><span>;
    } </span><span>else</span><span> {
        echo </span><span>'</span><span>没有id属性</span><span>'</span><span>;
    }
    echo </span><span>'</span><span><br></span><span>'</span><span>;
</span><span>//</span><span> 判断节点是否具有属性</span>
    <span>if</span> ($person-><span>hasAttributes ()) {
        echo </span><span>'</span><span>有属性</span><span>'</span><span>;
    } </span><span>else</span><span> {
        echo </span><span>'</span><span>没有任何属性</span><span>'</span><span>;
    }
    echo </span><span>'</span><span><br></span><span>'</span><span>;
</span><span>//</span><span> 得到第一个person的id属性值</span>
    echo $person->getAttribute ( <span>'</span><span>id</span><span>'</span> );

Das vorherige Beispiel konnte nur ein Datenelement erhalten. Jetzt möchte ich vollständige Informationen über alle erhalten.

Beispiel 4:

Was ist, wenn Attribute hat und durchlaufen werden muss?

<?<span>php
    header ( </span><span>'</span><span>content-type:text/html;charset=gb2312</span><span>'</span><span> );
    $dom </span>= <span>new</span> DOMDocument ( <span>'</span><span>1.0</span><span>'</span>, <span>'</span><span>utf-8</span><span>'</span><span> );
    $dom</span>->load ( <span>'</span><span>demo01.xml</span><span>'</span><span> );
</span><span>//</span><span> 得到所有person节点</span>
    $persons = $dom->getElementsByTagName ( <span>'</span><span>person</span><span>'</span><span> );
</span><span>//</span><span> 得到总人数</span>
    $count = $persons-><span>length;
    </span><span>for</span>($i = <span>0</span>; $i < $count; $i ++<span>) {
    </span><span>//</span><span> $person表示第i个人</span>
        $person = $persons-><span>item ( $i );
        echo </span><span>'</span><span>第</span><span>'</span> . ($i + <span>1</span>) . <span>'</span><span>个人的</span><span>'</span><span>;
        </span><span>if</span> ($person->hasAttribute ( <span>'</span><span>id</span><span>'</span><span> )) {
            echo </span><span>'</span><span>学号:</span><span>'</span> . $person->getAttribute ( <span>'</span><span>id</span><span>'</span><span> );
        }
        echo </span><span>'</span><span>姓名:</span><span>'</span> . $person->getElementsByTagName ( <span>'</span><span>name</span><span>'</span> )->item ( <span>0</span> )-><span>nodeValue;
        echo </span><span>'</span><span>年龄:</span><span>'</span> . $person->getElementsByTagName ( <span>'</span><span>age</span><span>'</span> )->item ( <span>0</span> )-><span>nodeValue;
        echo </span><span>'</span><span><br></span><span>'</span><span>;
    }
</span>?>

Das Obige stellt XML DOM (10) in PHP vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn