替换.xml文件中的无效URI

时间:2019-01-22 23:50:51

标签: php xml soap xml-parsing simplexml

我如何替换xml文件中的无效URI,我无法解析xml文件,因为它在尝试解析文件时给出了无效的URI错误。如何将.xml文件的内容读取为字符串,以便可以替换无效的URI。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Submit xmlns="http://localhost/....">
    <Order>
    <Components>
        <Component>
            <ocode> ABC</ocode>
        </Component>
    </Components>
</Order>
</Submit>
</soap:Body>
</soap:Envelope>

1 个答案:

答案 0 :(得分:1)

如果只需要内容,请使用SimpleXML和XPath来获取主体内容...

$xml=simplexml_load_file("NewFile.xml"); 
$content = $xml->xpath("//soap:Body/*");
echo $content[0]->Order->asXML();

会给...

<Order>
    <Components>
        <Component>
            <ocode> ABC</ocode>
        </Component>
    </Components>
</Order>

不确定名称空间http://localhost/....应该是什么,但是它应该是有效的URI-即使它是http://localhost

编辑:

要尝试修复URI,可以先将文件读取为字符串,然后将无效的字符串替换为有效的字符串...

$data = file_get_contents("NewFile.xml");
$data = str_replace("http://localhost/....", "http://localhost", $data);
$xml=simplexml_load_string($data);

或者您也可以尝试删除所有属性...

$data = preg_replace("/<Submit.*?>/", "<Submit>", $data);