Oprettet søn. d. 29. juli 2012 kl. 14:29:27

lubker
lubker (13.325 point. Point ude: 300)

PHP parsing af XML fil med flere namespaces.

Jeg har en XML fil med flere namespaces, som jeg forsøger at parse i php.

Den relevante information jeg forsøger at hive ud er resourceID, type (fx: ns2:WSFloatingPointValue), og værdien fra den "child" med samme navn som typen (fx 25.299...).

Næste element vil hedde ns3 osv.

Jeg kan hente resourceID ud meget enkelt med nedenstående kode, men hvordan jeg henter typen og den tilhørende værdi har jeg ingen idé om.

$xml = simplexml_load_file('data.xml');
foreach($xml->children('soapenv', true)->children('ns1', true)->getRuntimeValues2->arrayItem as    $sikey => $sidsta){
  //Return resID
  echo 'resID: '.$sidsta->resourceID."<br>";
}


XML fil:
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/ (...) xmlns:xsi="http://www.w3.org/ (...) xmlns:xsd="http://www.w3.org/ (...)
<soapenv:Body>
<ns1:getRuntimeValues2 xmlns:ns1="utcs">
<ns1:arrayItem xsi:type="ns1:WSResourceValueEnvelope">
<ns1:resourceID xsi:type="xsd:int">62484</ns1:resourceID>

<ns1:isValueRuntime xsi:type="xsd:boolean">true</ns1:isValueRuntime>

<ns1:typeString xsi:type="xsd:string">resource_temperature</ns1:typeString>

<ns1:value xmlns:ns2="utcs.values"  xsi:type="ns2:WSFloatingPointValue">
<ns2:minimumValue xsi:type="xsd:double">-1000.0</ns2:minimumValue>

<ns2:floatingPointValue xsi:type="xsd:double">25.299999237060547</ns2:floatingPointValue>

<ns2:maximumValue xsi:type="xsd:double">1000.0</ns2:maximumValue>
</ns1:value>
</ns1:arrayItem>

<ns1:arrayItem xsi:type="ns1:WSResourceValueEnvelope">
<ns1:resourceID xsi:type="xsd:int">77076</ns1:resourceID>

<ns1:isValueRuntime xsi:type="xsd:boolean">true</ns1:isValueRuntime>

<ns1:typeString xsi:type="xsd:string">resource_temperature</ns1:typeString>

<ns1:value xmlns:ns3="utcs.values"  xsi:type="ns3:WSFloatingPointValue">
<ns3:minimumValue xsi:type="xsd:double">-1000.0</ns3:minimumValue>

<ns3:floatingPointValue xsi:type="xsd:double">25.200000762939453</ns3:floatingPointValue>

<ns3:maximumValue xsi:type="xsd:double">1000.0</ns3:maximumValue>
</ns1:value>
</ns1:arrayItem>

<ns1:arrayItem xsi:type="ns1:WSResourceValueEnvelope">
<ns1:resourceID xsi:type="xsd:int">146196</ns1:resourceID>

<ns1:isValueRuntime xsi:type="xsd:boolean">true</ns1:isValueRuntime>

<ns1:typeString xsi:type="xsd:string">resource_temperature</ns1:typeString>

<ns1:value xmlns:ns4="utcs.values"  xsi:type="ns4:WSFloatingPointValue">
<ns4:minimumValue xsi:type="xsd:double">-1000.0</ns4:minimumValue>

<ns4:floatingPointValue xsi:type="xsd:double">24.299999237060547</ns4:floatingPointValue>

<ns4:maximumValue xsi:type="xsd:double">1000.0</ns4:maximumValue>
</ns1:value>
</ns1:arrayItem>


</ns1:getRuntimeValues2>
</soapenv:Body>
</soapenv:Envelope>

Skrevet søn. d. 29. juli 2012 kl. 15:22:42| #1

lubker
lubker (13.325 point)
Jeg fik den klaret med nedenstående kode:
$xml = simplexml_load_file('data.xml');

$valuetypes['resource_temperature'] = "floatingPointValue";
$valuetypes['dataline_output'] = "value";

$keycounter = 2;
foreach($xml->children('soapenv', true)->children('ns1', true)->getRuntimeValues2->arrayItem as $keys => $XMLarray){
    //Return resID
    echo 'resID: '.$XMLarray->resourceID."<br>";
    echo 'typeString: '.$XMLarray->typeString."<br>";   
    echo $XMLarray->value->children('ns'.$keycounter, true)->$valuetypes[''.$XMLarray->typeString.'']."<br>";
    $keycounter++;
}

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

hjælp til php / mysql

Oprettet den 23. maj 2013 kl. 10.54
AOT1977 giver 30 point for svar | Giv et svar »

Hjælp til database kolonne

Oprettet den 22. maj 2013 kl. 17.44
StotheT giver 30 point for svar | Giv et svar »

opret tabel og insert

Oprettet den 22. maj 2013 kl. 14.10
agent_qa giver 60 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Ny opfindelse: Oplad din mobil på 20 sekunder

Måske er det snart slut med at lade mobilen op hver aften. Med ny opfindelse kan telefonen få fuld energi på sølle 20 sekunder.


Nyheder fra Computerworld

Teaser billede

Mail-system i sort hos stor dansk operatør - massevis af danskere ramt

Et af Danmarks helt store mail-tjenester i sort. Massevis af danskere ramt.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger