Пространства имен атрибута simpelXMLElement - PullRequest
0 голосов
/ 10 июня 2018

Я изучаю эту проблему уже несколько дней и мне нужна помощь с ней.Я хочу получить доступ к атрибутам пространства имен для элемента inhoud.В этом случае, например, я хочу значение атрибута из атрибута contentType.Поэтому я хочу получить значение text / plain.

<inhoud p10:contentType="text/plain" p6:bestandsnaam="hallo 2.txt" xmlns:p10="http://www.w3.org/2005/05/xmlmime">aGFsbG8gZGFhciB4DQoNCg0K</inhoud>

Это префикс с пространством имен p10.

Ниже XML:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <updateZaakdocument_Di02 xmlns="http://www.egem.nl/StUF/sector/zkn/0310">
            <edcLk02 p6:entiteittype="EDC" p6:functie="update" xmlns:p6="http://www.egem.nl/StUF/StUF0301">
                <parameters>
                    <p6:mutatiesoort>W</p6:mutatiesoort>
                </parameters>
                <object p6:entiteittype="EDC" p6:sleutelVerzendend="934087" p6:verwerkingssoort="W">
                    <inhoud p10:contentType="text/plain" p6:bestandsnaam="hallo 2.txt" xmlns:p10="http://www.w3.org/2005/05/xmlmime">aGFsbG8gZGFhciB4DQoNCg0K</inhoud>
                </object>
            </edcLk02>
        </updateZaakdocument_Di02>
    </s:Body>
</s:Envelope>

У меня естьпробовал это:

<?php

    $sxe = new SimpleXMLElement($xml);

    $namespaces = $sxe->getNamespaces(true);

    $body = $sxe->xpath('//s:Body')[0];

    $inhoud = $body->updateZaakdocument_Di02->edcLk02->object->inhoud->children($namespaces["p10"]);
    print_r($inhoud);

результат:

SimpleXMLElement Object ([@attributes] => Array ([contentType] => text / plain))

Я пытался оттуда:

echo (string) $inhoud >attributes($namespaces["p10"], true)->contentType;

Но никогда не получал ценность из этого.Предупреждение: Узел больше не существует в строке выше

Может кто-нибудь указать мне правильное решение здесь?Заранее спасибо (-:

1 Ответ

0 голосов
/ 11 июня 2018

Я думаю, что когда вы выбираете значение $ inhoud, вы выбираете детей в пространстве имен p10.Вместо этого вам нужно извлечь атрибуты из пространства имен p10 ...

$inhoud = $body->updateZaakdocument_Di02->edcLk02->object->inhoud;
print_r($inhoud);

echo "contentType=".(string)$inhoud->attributes($namespaces["p10"])->contentType;

Это выводит ...

SimpleXMLElement Object
(
    [0] => aGFsbG8gZGFhciB4DQoNCg0K
)
contentType=text/plain

Также при использовании различных методов, использующих пространства имен,Второй параметр - указать, что вы используете префикс.При использовании $namespaces["p10"] это URI, поэтому вы должны пропустить второй параметр.

...