2 Stimmen

SimpleXML mehr Tags in 1 Element

Hey Leute, ich möchte einige Xml parsen, aber ich weiß nicht, wie ich die gleichen Tags aus 1 Element erhalten kann.

Ich möchte das analysieren:

<profile>
   <name>john</name>
   <lang>english</lang>
   <lang>dutch</lang>
</profile>

Ich möchte die Sprachen analysieren, die John spricht. Wie kann ich das tun?

2voto

usoban Punkte 5362
$profile->lang[0]
$profile->lang[1]

2voto

random Punkte 9529

Sie können eine foreach Schleife über den Elementknoten, nachdem Sie ihn mit SimpleXML wie folgt eingezogen haben:

$xml_profiles = simplexml_load_file($file_profiles);

foreach($xml_profiles->profile as $profile)
{   //-- first foreach pulls out each profile node

    foreach($profile->lang as $lang_spoken)
    {   //-- will pull out each lang node into a variable called $lang_spoken
        echo $lang_spoken;
    }
}

Dies hat den Vorteil, dass es eine beliebige Anzahl von lang Elemente, die Sie für jedes Profilelement haben oder nicht haben können.

1voto

Gordon Potter Punkte 5734

Stellen Sie sich vor, dass sich doppelte XML-Knoten wie ein Array verhalten.

Wie bereits von anderen erwähnt, können Sie auf die untergeordneten Knoten mit der Klammersyntax zugreifen

myXML->childNode[childIndex]

Nebenbei bemerkt: So funktionieren RSS-Feeds. Sie werden feststellen, dass mehrere

<item>
</item>

<item>
</item>

<item>
</item>

Tags innerhalb eines Tags von RSS XML. RSS-Reader lösen dieses Problem täglich, indem sie die Liste als ein Array von Elementen behandeln.

Die in einer Schleife übertragen werden können.

0voto

null Punkte 7142

Sie können auch XPath verwenden, um ein Array mit bestimmten Elementen zu sammeln, wie

$xProfile = simplexml_load_string("<profile>...</profile>");
$sName = 'john';
$aLang = $xProfile->xpath("/profile/name[text()='".$sName."']/lang");
// Now $aLang will be an array of lang *nodes* (2 for John). Because they
// are nodes you can still do SimpleXML "stuff" with them i.e.
// $aLang[0]->attributes(); --which is an empty object
// or even

$sPerson = (string)$aLang[0]->xpath('preceding-sibling::name');
// of course you already know this... but this was just to show what you can do
// with the SimpleXml node.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X