Avatar billede donslund Nybegynder
16. august 2007 - 14:22 Der er 14 kommentarer og
1 løsning

Gennemlæse XML

Jeg har følgende XML i et object

<field>
    <id>9813</id>
    <name>total_bounce_count</name>
    <description>total_bounce_count</description>
    <value>0</value>
    <isbinded>0</isbinded>
    <isrelationenforced>0</isrelationenforced>
</field>
<field>
    <id>1536</id>
    <name>password</name>
    <description>password</description>
    <value>hdu87dHt</value>
    <isbinded>0</isbinded>
    <isrelationenforced>0</isrelationenforced>
</field>
<field>
    <id>2068</id>
    <name>name</name>
    <description>name</description>
    <value></value>
    <isbinded>0</isbinded>
    <isrelationenforced>0</isrelationenforced>
</field>

Hvordan gennemløber jeg det, så jeg får fat i eks. password-delen?
Avatar billede zurekk Nybegynder
16. august 2007 - 14:26 #1
Er ikke sikker på hvad du mener, "password-delen"?
Hvad er det præcist du skal have fat i, og er det noget regexp/preg_match du leder efter?
Avatar billede donslund Nybegynder
16. august 2007 - 14:31 #2
Ud fra ovenstående skal jeg have fat i <value>hdu87dHt</value>
Avatar billede w13 Novice
16. august 2007 - 14:37 #3
<?php
  $doc = new DOMDocument();
  $doc->load( 'books.xml' );
 
  $books = $doc->getElementsByTagName( "book" );
  foreach( $books as $book )
  {
  $authors = $book->getElementsByTagName( "author" );
  $author = $authors->item(0)->nodeValue;
 
  $publishers = $book->getElementsByTagName( "publisher" );
  $publisher = $publishers->item(0)->nodeValue;
 
  $titles = $book->getElementsByTagName( "title" );
  $title = $titles->item(0)->nodeValue;
 
  echo "$title - $author - $publisher\n";
  }
  ?>
Dette er hentet fra http://www.ibm.com/developerworks/opensource/library/os-xmldomphp/ , som giver en forklaring under punktet "Listing 2".
Avatar billede donslund Nybegynder
16. august 2007 - 14:56 #4
Men jeg skal ikke hente ekstern XML. Jeg har det allerede i en variabel.

ParsedXML indeholder ovenstående XML.
Avatar billede zurekk Nybegynder
16. august 2007 - 15:04 #5
Er der en min. størrelse på password, og hvad kan de andre <value>'s komme til at indholde?
Avatar billede donslund Nybegynder
16. august 2007 - 15:06 #6
Nej. Det kan der vist ikke siges noget bestemt om.

Her er den kode der laver min $parsedXML

$xmlStr2 = $Getclient2->__getLastResponse();
//print "<br>xmlStr: ".$xmlStr2."<br>\n\n";
$xml = new SimpleXMLElement($xmlStr2);

// here's the raw html
$xmlStr2 = str_replace("&lt;", "<", $xmlStr2);
$xmlStr2 = str_replace("&gt;", ">", $xmlStr2);
$xmlRaw = $xmlStr2;
//print "xmlRaw".$xmlRaw;
// here are the xml field names
$xmlFieldNames2=array("fields");
// for each xml field...
foreach ($xmlFieldNames2 as $xmlField) {
    if(strpos($xmlRaw,$xmlField)!==false){
        // I've broken 1 single line into 4 for display purposes
        $parsedXML2[$xmlField]=substr($xmlRaw,
        strpos($xmlRaw,"<$xmlField>")+strlen("<$xmlField>"),
        strpos($xmlRaw,"</$xmlField>")-strlen("<$xmlField>")
        -strpos($xmlRaw,"<$xmlField>"));
    }
}
print_r($parsedXML2)."<br><br>";

Måske er det slet ikke så svært.
Avatar billede zurekk Nybegynder
16. august 2007 - 15:09 #7
preg_match_all( '/<value>([a-zA-Z0-9]){0,}<\/value>/i', $xmlvariabel, $matches );

echo $matches[0][1];

Virker, er dog sikker på at der findes en nemmere metode :)
Avatar billede zurekk Nybegynder
16. august 2007 - 15:11 #8
Hvis du så smider flere "value" felter ind før din password, skal du så ændre 1 til hvad den ender med.
Avatar billede zurekk Nybegynder
16. august 2007 - 15:15 #9
Mnahhh, troede du havde det i ren tekst, så er jeg ikke sikker på hvordan det skal gøres, ved ikke hvordan dit array ser ud :)
Avatar billede donslund Nybegynder
16. august 2007 - 15:25 #10
Sådan:

Array
(
    [fields] => <field><id>9813</id><name>total_bounce_count</name><description>total_bounce_count</description><value>0</value><isbinded>0</isbinded><isrelationenforced>0</isrelationenforced></field><field><id>1536</id><name>password</name><description>password</description><value>hdu87dHt</value><isbinded>0</isbinded><isrelationenforced>0</isrelationenforced></field><field><id>2068</id><name>name</name><description>name</description><value></value><isbinded>0</isbinded><isrelationenforced>0</isrelationenforced></field><field><id>2102</id><name>Language</name><description>Language</description><value>Dansk</value><isbinded>0</isbinded><isrelationenforced>0</isrelationenforced></field><field><id>4654</id><name>Reseller</name><description>Reseller</description><value>Cyclus</value><isbinded>0</isbinded><isrelationenforced>0</isrelationenforced></field>
)

Ja, det er jo ikke just overskueligt.
Avatar billede zurekk Nybegynder
16. august 2007 - 15:37 #11
jamen jo, så burde det her virke:

preg_match_all( '/<value>([a-zA-Z0-9]){0,}<\/value>/i', $parsedXML2['fields'], $matches );

echo $matches[0][1];
Avatar billede donslund Nybegynder
20. august 2007 - 11:42 #12
Jeg får denne fejl:

Warning: preg_match_all() expects parameter 2 to be string, array given in .... line 189

Så det betyder vel, at preg_match ikke kan bruges.
Avatar billede donslund Nybegynder
20. august 2007 - 15:01 #13
Har løst problemet ;-) Brug preg_match, så smid et svar her så.
Avatar billede donslund Nybegynder
28. august 2007 - 10:03 #14
Zurekk? Et svar? Ellers lukker jeg bare ....
Avatar billede donslund Nybegynder
22. januar 2008 - 16:47 #15
Så lukker jeg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester