Comment analyser du XML avec plusieurs espaces de noms en utilisant SimpleXML en PHP ?

Susan Sarandon
Libérer: 2024-11-07 06:22:03
original
178 Les gens l'ont consulté

How can you parse XML with multiple namespaces using SimpleXML in PHP?

Analyse XML avec plusieurs espaces de noms à l'aide de SimpleXML

La tâche d'analyse XML avec plusieurs espaces de noms peut être intimidante lorsque vous travaillez avec SimpleXML. En effet, SimpleXML nécessite une déclaration explicite des espaces de noms pour accéder aux éléments d'autres espaces de noms.

Considérez le XML suivant avec plusieurs espaces de noms :

<code class="xml"><soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
    <soap-env:Header>
        <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="1.0" soap-env:mustUnderstand="1">
            <eb:From>
                <eb:PartyId eb:type="URI">wscompany.com</eb:PartyId>
            </eb:From>
            <eb:To>
                <eb:PartyId eb:type="URI">mysite.com</eb:PartyId>
            </eb:To>
            <eb:CPAId>something</eb:CPAId>
            <eb:ConversationId>moredata.com</eb:ConversationId>
            <eb:Service eb:type="compXML">theservice</eb:Service>
            <eb:Action>theaction</eb:Action>
            <eb:MessageData>
                <eb:MessageId>a certain messageid</eb:MessageId>
                <eb:Timestamp>2009-04-11T18:43:58</eb:Timestamp>
                <eb:RefToMessageId>mid:areference</eb:RefToMessageId>
            </eb:MessageData>
        </eb:MessageHeader>
        <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
            <wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">an impresive binary security toekn</wsse:BinarySecurityToken>
        </wsse:Security>
    </soap-env:Header>
    <soap-env:Body>
        <SessionCreateRS xmlns="http://www.opentravel.org/OTA/2002/11" version="1" status="Approved">
            <ConversationId>the goodbye token</ConversationId>
        </SessionCreateRS>
    </soap-env:Body>
</soap-env:Envelope></code>
Copier après la connexion

Tentative de charger ce XML à l'aide de SimpleXML sans enregistrer les espaces de noms. seul le premier espace de noms sera reconnu. Pour analyser cela correctement, nous devons enregistrer les espaces de noms et créer des expressions XPath qui en tiennent compte.

<code class="php">$xml = simplexml_load_string($res);
$xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('eb', 'http://www.ebxml.org/namespaces/messageHeader');
$xml->registerXPathNamespace('wsse', 'http://schemas.xmlsoap.org/ws/2002/12/secext');

// Getting the CPAId using XPath
$cpaId = $xml->xpath('//eb:CPAId');
var_export($cpaId); // Outputs: [SimpleXMLElement]

// Getting the BinarySecurityToken using XPath
$token = $xml->xpath('//wsse:BinarySecurityToken');
var_export($token); // Outputs: [SimpleXMLElement]</code>
Copier après la connexion

Ce code mis à jour enregistre les espaces de noms et utilise des expressions XPath pour accéder aux éléments des différents espaces de noms, ce qui nous permet de analyser efficacement le XML malgré plusieurs espaces de noms.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!