【问题标题】:replace an invalid URI in the .xml file替换 .xml 文件中的无效 URI
【发布时间】:2019-01-22 23:50:50
【问题描述】:

如何替换 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>

【问题讨论】:

  • 这是 SOAP 响应吗?如果是这样,您是否考虑过使用 SoapClient 而不是 cURL 或者您正在使用它?它可能比您自己直接处理 XML 更方便。只是一个建议。 :-)
  • 我没有直接访问soap响应的权限,我只能使用创建的xml文件。所以基本上我正在尝试读取.xml文件以获取节点值之一.
  • 我明白了。这很不幸,但它仍然应该是可行的。很可能是命名空间的问题。您能显示您当前正在使用的代码以及您遇到的错误吗?
  • 我只是想看看是否可以使用 simplexml_load_file 读取 xml,但我收到错误 $xml=simplexml_load_file("test.xml"); print_r($xml);
  • 命名空间错误:xmlns: 'localhost....' 不是有效的 URI

标签: php xml soap xml-parsing simplexml


【解决方案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);

【讨论】:

  • 它在 simplexml_load_file 上出错了,我怎样才能从 .xml 文件中替换无效的 uri。
  • 我添加了一些新代码,您可以在加载之前处理字符串。
  • 如何查看更改后的 xml 的输出,当我执行 print_r 时,它会给出空白对象,而当我执行 echo $xml->asxml() 时,它只显示所有值,而不是作为 xml或数组。我尝试以 $xml->Order->Components->Component->ocode 的形式访问 ocode,但没有显示任何内容。
  • 如果您在浏览器中使用echo $xml-&gt;asxml(),您可能需要查看源代码才能看到完整的 XML。
  • 谢谢 :) @Nigel Ren
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
相关资源
最近更新 更多