2010-02-08 7 views
1
<?xml version="1.0" encoding="ISO-8859-2"?> 
    <!DOCTYPE pasaz:Envelope SYSTEM "loadOffers.dtd"> 
    <pasaz:Envelope xmlns:pasaz="http://schemas.xmlsoap.org/soap/envelope/"> 
     <pasaz:Body> 
      <loadOffers xmlns="urn:ExportB2B"> 
       <offers /> 
      </loadOffers> 
     </pasaz:Body> 
    </pasaz:Envelope> 

Je dois ajouter des nœuds enfants au nœud "offres" et j'utilise SimpleXML.Ajouter un nœud en utilisant XML SimpleXML de PHP avec des espaces de noms

Le code PHP: $offer = $xml->offers->addChild('offer') renvoie une erreur.

Tout est faux parce que j'ai un problème avec la gestion des espaces de noms dans SimpleXML! S'il vous plaît aider!

Répondre

2

E.g. en utilisant xpath, obtenez l'élément cible/parent.

<?php 
$envelope = new SimpleXMLElement('<?xml version="1.0" encoding="ISO-8859-2"?> 
<!DOCTYPE pasaz:Envelope SYSTEM "loadOffers.dtd"> 
<pasaz:Envelope xmlns:pasaz="http://schemas.xmlsoap.org/soap/envelope/"> 
    <pasaz:Body> 
    <loadOffers xmlns="urn:ExportB2B"> 
     <offers /> 
    </loadOffers> 
    </pasaz:Body> 
</pasaz:Envelope>'); 

$envelope->registerXPathNamespace('pasaz', 'http://schemas.xmlsoap.org/soap/envelope/'); 
$envelope->registerXPathNamespace('b2b', 'urn:ExportB2B'); 
$ns = $envelope->xpath('//pasaz:Body/b2b:loadOffers/b2b:offers'); 
if (0<count($ns)) { 
    $offers = $ns[0]; 
    $offers->a = 'abc'; 
    $offers->x = 'xyz'; 
} 
echo $envelope->asXml(); 

impressions

<?xml version="1.0" encoding="ISO-8859-2"?> 
<!DOCTYPE pasaz:Envelope SYSTEM "loadOffers.dtd"> 
<pasaz:Envelope xmlns:pasaz="http://schemas.xmlsoap.org/soap/envelope/"> 
    <pasaz:Body> 
    <loadOffers xmlns="urn:ExportB2B"> 
     <offers><a>abc</a><x>xyz</x></offers> 
    </loadOffers> 
    </pasaz:Body> 
</pasaz:Envelope> 
Questions connexes