提问人:marco 提问时间:11/7/2023 最后编辑:marco 更新时间:11/8/2023 访问量:64
读取 XML 中具有命名空间和load_file的 XML 文件
read xml file with namespace and load_file in xml
问:
我正在尝试使用xml_loadfile读取xml文件。 xml 文件包含命名空间,我可以用 xmlload_string 读取它,但是当我使用 loadfile 时它不起作用。 XML 存储在我的服务器上。
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<exp:Input xmlns:exp="http://xps.com">
<exp:serviceId>namesurname</exp:serviceId>
<exp:data>
<exp:xml>coded</exp:xml>
</exp:data>
</exp:Input>
</soapenv:Body>
</soapenv:Envelope>
我试过了
<?php
$xmlFilePath = 'xml/2.xml';
$xml = simplexml_load_file($xmlFilePath);
$namespaces = $xml->getNamespaces(true);
$exp = $xml->children($namespaces['exp']);
$serviceId = $exp->Input->serviceId;
echo $serviceId;
?>
但屏幕上不显示任何内容
我需要读取名为serviceId的子项
答:
0赞
KIKO Software
11/8/2023
#1
接受挑战。不,但你是对的,如果没有轻微的摆弄,我就无法做到这一点:
$xmlFilePath = 'xml/2.xml';
$content = file_get_contents($xmlFilePath);
$content = str_replace(['soapenv:', 'exp:'], '', $content);
$xml = new SimpleXMLElement($content);
$serviceId = $xml->Body->Input->serviceId;
echo $serviceId;
通过替换 and,我可以将输入作为普通 XML 处理,而无需担心命名空间。soapenv:
exp:
然而,PHP中有真正的SoapClient(),但我没有尝试过,因为我怀疑我没有关于你的SOAP响应的所有信息。
评论
0赞
marco
11/8/2023
谢谢完美工作!
评论
false
simplexml_load_file($xmlFilePath);
false