2017-04-26 2 views
1

Ich benutze DomDocument für den Zugriff auf XML-Daten, aber ich kann nicht zugreifen.Zugriff auf XML nach foreach mit DomDocument

$xmlstring =<<<XML 
    <CcyTbl> 
    <CcyNtry> 
    <CtryNm>AFGHANISTAN</CtryNm> 
    <CcyNm>Afghani</CcyNm> 
    <Ccy>AFN</Ccy> 
    <CcyNbr>971</CcyNbr> 
    <CcyMnrUnts>2</CcyMnrUnts> 
    </CcyNtry> 
    <CcyNtry> 
    <CtryNm>ÅLAND ISLANDS</CtryNm> 
    <CcyNm>Euro</CcyNm> 
    <Ccy>EUR</Ccy> 
    <CcyNbr>978</CcyNbr> 
    <CcyMnrUnts>2</CcyMnrUnts> 
    </CcyNtry> 
    <CcyNtry> 
    <CtryNm>ALBANIA</CtryNm> 
    <CcyNm>Lek</CcyNm> 
    <Ccy>ALL</Ccy> 
    <CcyNbr>008</CcyNbr> 
    <CcyMnrUnts>2</CcyMnrUnts> 
    </CcyNtry> 
    <CcyNtry> 
    <CtryNm>ALGERIA</CtryNm> 
    <CcyNm>Algerian Dinar</CcyNm> 
    <Ccy>DZD</Ccy> 
    <CcyNbr>012</CcyNbr> 
    <CcyMnrUnts>2</CcyMnrUnts> 
    </CcyNtry> 
    <CcyNtry> 
    <CtryNm>AMERICAN SAMOA</CtryNm> 
    <CcyNm>US Dollar</CcyNm> 
    <Ccy>USD</Ccy> 
    <CcyNbr>840</CcyNbr> 
    <CcyMnrUnts>2</CcyMnrUnts> 
    </CcyNtry> 
    </CcyTbl> 
    XML; 
    $doc = new DOMDocument('1.0', 'UTF-8'); 
    $doc->loadXML(utf8_encode($xmlstring)); 
    $countries = $doc->getElementsByTagName('CcyNtry'); 
    foreach($countries as $country){ 
    print_r($country->nodeValue);die(); 

    } 

Dies zeigt

AFGHANISTAN Afghani AFN 971 2 

Aber ich möchte auf einzelne Elemente zugreifen wie CtryNm, CcyNm, Ccy

I

$doc = new DOMDocument('1.0', 'UTF-8'); 
    $doc->loadXML(utf8_encode($xmlstring)); 
    $countries = $doc->getElementsByTagName('CcyNtry'); 
    foreach($countries as $country){ 
     echo $country->CtryNm;die(); 

    } 

undefinierte Eigenschaft zuzugreifen versucht: DOMElement :: $ CtryNm

+0

Können Sie den vollständigen Code angeben? Das erste Beispiel enthält einen Parse-Fehler. –

+0

Sie müssen das XML verschieben; in die erste Zeile –

+0

Ja, Sie müssen dies versuchen $ countries = $ doc-> getElementsByTagName ('CcyTbl'); – Shefali

Antwort

1

Versuchen Sie dies. Von unten Sie alle Elemente in der XML-Zugriff

$simple = "<CcyTbl> 
<CcyNtry> 
<CtryNm>AFGHANISTAN</CtryNm> 
<CcyNm>Afghani</CcyNm> 
<Ccy>AFN</Ccy> 
<CcyNbr>971</CcyNbr> 
<CcyMnrUnts>2</CcyMnrUnts> 
</CcyNtry> 
<CcyNtry> 
<CtryNm>ÅLAND ISLANDS</CtryNm> 
<CcyNm>Euro</CcyNm> 
<Ccy>EUR</Ccy> 
<CcyNbr>978</CcyNbr> 
<CcyMnrUnts>2</CcyMnrUnts> 
</CcyNtry> 
<CcyNtry> 
<CtryNm>ALBANIA</CtryNm> 
<CcyNm>Lek</CcyNm> 
<Ccy>ALL</Ccy> 
<CcyNbr>008</CcyNbr> 
<CcyMnrUnts>2</CcyMnrUnts> 
</CcyNtry> 
<CcyNtry> 
<CtryNm>ALGERIA</CtryNm> 
<CcyNm>Algerian Dinar</CcyNm> 
<Ccy>DZD</Ccy> 
<CcyNbr>012</CcyNbr> 
<CcyMnrUnts>2</CcyMnrUnts> 
</CcyNtry> 
<CcyNtry> 
<CtryNm>AMERICAN SAMOA</CtryNm> 
<CcyNm>US Dollar</CcyNm> 
<Ccy>USD</Ccy> 
<CcyNbr>840</CcyNbr> 
<CcyMnrUnts>2</CcyMnrUnts> 
</CcyNtry> 
</CcyTbl>"; 
echo "<pre>"; 
print_r(new SimpleXMLElement($simple)); 
1
$doc = new DOMDocument('1.0', 'UTF-8'); 
$doc->loadXML(utf8_encode($xmlstring)); 

$countries = $doc->firstChild->getElementsByTagName('CcyNtry'); 

foreach($countries as $country){ 
    echo $country->getElementsByTagName('CtryNm')->item(0)->nodeValue . '<br />'; 
} 

Dies wird alle der CtryNm's bekommen. Ersetzen Sie einfach CtryNm durch den Namen des Tags, das Sie abrufen möchten. Sie sollten wahrscheinlich in SimpleXML schauen.

1

Wenn Sie auf Ihre XML-Knoten als Objekteigenschaften zugreifen möchten, verwenden Sie SimpleXML anstelle von DOMDocument, es wird viel einfacher zu verwenden sein. Hier

ist ein Beispiel für die XML-String:

$xml = simplexml_load_string($xmlstring); 
foreach ($xml->CcyNtry as $country) { 
    echo $country->CtryNm . "\n"; 
} 

Das gleiche Weise können Sie andere Knoten Ihres XML als Objekteigenschaften zugreifen können.