我现在关注这个问题几天,需要一些帮助。 我想访问' 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;
但永远不会从中获得价值。 警告:上面的行中不再存在节点
有人能指出我正确的解决方案吗? 提前致谢( - :
答案 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,因此您应该保留第二个参数。