2017-07-27 1 views
1

ich eine XML-Datei, die so etwas wie diese: (Dateiname: abc.xml)Schleife durch XML-Knoten mit XmlStringStreamer in PHP

<Envelope> 
    <Body> 
     <SResponse> 
      <Body> 
       <SResponseDetails> 
        <SItem>...</SItem> 
        <SItem>...</SItem> 
        <SItem>...</SItem> 
        <SItem>...</SItem> 
       </SResponseDetails> 
      </Body> 
     </SResponse> 
    </Body> 
</Envelope> 

ich all <SItem> in einer DB-Tabelle gespeichert werden soll (1 Datensatz für jedes SItem). Ich benutze PHP dafür und benutze XmlStringStreamer.

Hier ist mein Code zum Lesen und Bearbeiten dieser Datei.

$streamer = \Prewk\XmlStringStreamer::createStringWalkerParser(__DIR__ . "/tempFile.xml"); 
$stream = new Stream\File(__DIR__ . "/abc.xml", 1024); 
$parser = new Parser\StringWalker(); 
$streamer = new XmlStringStreamer($parser, $stream); 
while ($node = $streamer->getNode()) { 
    $simpleXmlNode = simplexml_load_string($node); 
    //-- code here for getting single node 
} 

Ich verwende XmlStringStreamer und keine Antwort von jedem Forum bekommen habe, habe ich auch versucht, aber bekommen konnte nicht das, was ich so will, kann jemand mir bitte helfen.

Vielen Dank.

Antwort

1

Ich habe es gelöst, hier ist meine Antwort dafür. Für spezifische Element Looping, können wir dies direkt in xmlStringSteamer verwenden:

$stream = new Stream\File(__DIR__ . "/abc.xml", 1024); 
$options = array(
    "uniqueNode" => "SItem" 
); 
$parser = new Parser\UniqueNode($options); 

// Create the streamer 
$streamer = new XmlStringStreamer($parser, $stream); 

$countNodes = 0; 
while ($node = $streamer->getNode()) 
{ 
    print_r($node); 
} 

Das einzige Problem ist, dass es XML-Tags in Kleinbuchstaben umwandelt. wie <SItem> wird <sitem>. Hat also jemand eine Idee zu diesem Problem?

0

Ich habe Ihren Code nicht ausgeführt, aber ich denke, Sie können PHP-Logik verwenden. Wenn etwas nicht für Sie funktioniert, dann wird die letzte Lösung explodieren $simpleXmlNode, um einige Array-Struktur zu bekommen und dann nach Ihren Bedürfnissen zu verarbeiten. Übrigens können Sie teilen, was Sie nach $simpleXmlNode = simplexml_load_string($node) bekommen haben?

Für andere kann ich keine Kommentare hinzufügen, um dies als Antwort zu posten.

+1

zur Verarbeitung habe ich versucht, diese auch in while-Schleife: foreach ($ simpleXmlNode-> SResponse-> Body-> SResponseDetails-> SITEM as $ item) Und ich erhalte jeden Knoten in XmlObject so, ich bin xml konvertieren Objekt zu XML mit asXML() -Funktion, aber es konvertieren Zeichen in Kleinbuchstaben. – GoalDone

+1

können Sie den $ simpleXmlNode-Beispielwert angeben? Ich werde sehen, ob Sie etwas Zeit finden, um es für Sie zu validieren? – Star

+0

können Sie mich wissen lassen, wie ich asXML() verwenden kann, ohne Text in Kleinbuchstaben zu ändern. Es konvertiert XML-Tags in Kleinbuchstaben. – GoalDone