2017-06-01 123 views
0

我想在使用PHP的XML文檔中使用getElementById。PHP getElementById返回null

PHP代碼是:

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

例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> 

我不明白爲什麼var_dump打印「NULL」,而當我嘗試var_dump($ DOM)它打印正確的東西,所以文檔正確加載。很顯然,XML和Schema格式良好。

+0

如果您刪除了xsd模式聲明,它會起作用嗎? – Halcyon

+0

無變化,始終爲NULL – Polletto

+1

這不是第一次getElementById不起作用。我使用$ xpath = new domXpath($ dom);的var_dump($ xpath->查詢( '// * [@ ID = 「Rect1的」]')); – splash58

回答

0

$ dom必須是對DOM文檔輸入,edittext,標籤和其他對象中的一個對象的引用。

+0

我不明白,你能更清楚嗎? – Polletto