2017-06-01 1 views
0

Ich versuche, GetElementById auf ein XML-Dokument mit PHP zu verwenden.PHP getElementById gibt null zurück

PHP-Code ist:

$dom = new DomDocument; 
$dom->preserveWhiteSpace = FALSE; 
$dom->validateOnParse = TRUE; 
$dom->loadXML(file_get_contents(<DocumentPath>)); 
var_dump($dom->getElementById('rect1')); 

Beispiel XML:

<?xml version="1.0" encoding="utf-8"?> 
<rectangles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="XML-DOM-RectSchema.xsd"> 

<rectangle id="rect1"> 
    <innerText>Rectangle 1</innerText> 
    <bgcolor>black</bgcolor> 
    <fontcolor>white</fontcolor> 
    <height>50</height> 
    <width>100</width> 
    <timespan>2002-05-30T09:30:10Z</timespan> 
</rectangle> 

XSD:

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="rectangles"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="rectangle" maxOccurs="unbounded"> 
       <xsd:complexType mixed="true"> 
        <xsd:sequence> 
         <xsd:element name="innerText" type="xsd:string" /> 
         <xsd:element name="bgcolor" type="xsd:string" /> 
         <xsd:element name="fontcolor" type="xsd:string" /> 
         <xsd:element name="height" type="xsd:positiveInteger" /> 
         <xsd:element name="width" type="xsd:positiveInteger" /> 
         <xsd:element name="timespan" type="xsd:dateTime" /> 
        </xsd:sequence> 
        <xsd:attribute name="id" type="xsd:ID" use="required" /> 
       </xsd:complexType> 
      </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Ich kann nicht verstehen, warum var_dump "NULL" ausgibt, während wenn ich var_dump ($ dom) versuche, druckt das richtige Zeug, so dass das Dokument korrekt geladen ist. Offensichtlich XML und Schema sind wohlgeformt.

+0

Funktioniert es, wenn Sie die Xsd-Schema-Deklaration entfernen? – Halcyon

+0

Keine Änderungen, immer NULL – Polletto

+1

Es ist nicht das erste Mal, wenn getElementById nicht funktioniert. Ich benutze $ xpath = new domXpath ($ dom); var_dump ($ xpath-> query ('// * [@ id = "rect1"]')); – splash58

Antwort

0

$ dom muss eine Referenz auf ein Objekt in der DOM-Dokumenteingabe, dem Editiertext, den Beschriftungen und anderen Objekten sein.

+0

Ich kann nicht verstehen, könnten Sie klarer sein? – Polletto