simpelXMLElement属性名称空间

时间:2018-06-10 20:58:40

标签: php xml soap simplexml

我现在关注这个问题几天,需要一些帮助。 我想访问' inhoud'的命名空间属性。元件。 在这种情况下,例如,我想要contentType属性中的属性值。所以我想抓住&text;简单'值。

<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对象   (       [@attributes] =&gt;排列           (               [contentType] =&gt;纯文本/           )   )

我从那里试过:

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

但永远不会从中获得价值。 警告:上面的行中不再存在节点

有人能指出我正确的解决方案吗? 提前致谢( - :

1 个答案:

答案 0 :(得分:0)

我认为当您获取$ 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,因此您应该保留第二个参数。