【问题标题】:Remove xml namespaces in php删除 php 中的 xml 命名空间
【发布时间】:2019-01-14 23:04:44
【问题描述】:

我正在尝试使用 php 删除 xml 命名空间,但是我很难做到这一点。

例如,我想要来自远程服务器的以下 xml 代码响应

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <data>
            <id>1</id>
            <id>2</id>
            <id>3</id>
        </data>
    </soap:Body>
</soap:Envelope>

要在本地服务器上进行解析;

<?xml version="1.0" encoding="utf-8"?>
<data>
    <id>1</id>
    <id>2</id>
    <id>3</id>
</data>

谢谢。

【问题讨论】:

  • 我看到您正在尝试修改soap有效负载。你用的是 php soap 客户端吗?
  • 所以你不想去掉namespace,但是想获取Envelope->Body的内容?
  • 在解析 XML 之前找到/替换 &lt;soap:&lt; 怎么样(糟糕……我知道)
  • @Scuzzy - 我正在使用 curl_exec 发送soap xml,我收到的响应是soap xml
  • @rickdenhaan - 请。

标签: php xml xml-parsing xml-namespaces


【解决方案1】:

您可以使用 XPath 和 SimpleXML 轻松提取数据,此代码采用一个字符串(这里使用 file_get_contents,我想您是从 cURL 获得的)并将其转换为 XML 文档。然后使用 XPath 提取 &lt;soap:Body&gt; 子节点(使用 //soap:Body/*) - 这将给出匹配节点的列表。要输出数据,它只使用asXML()...

$data = file_get_contents("data.xml");
$xml = simplexml_load_string($data);
$body = $xml->xpath("//soap:Body/*");
echo $body[0]->asXML();

【讨论】: