0

我正在使用(并且讨厌)一个 web 服务,它只为邮件运营商服务返回 SOAP XML 格式的数据(为什么不返回 JSONP?拜托!)

问题是我将在 jQuery 中“使用”数据,所以我试图将信息转换为 JSON 并使用 PHP 作为代理,因为 XML 无法跨域加载,我不想依赖 YQL

有许多脚本可以将 XML 转换为 JSON,但是从 web 服务返回的 xml 必须经过大量清理才能在此脚本中运行,否则它们会引发一堆错误。

返回的 xml 的第一部分是模式或数据集,所以那里没有数据,我需要 JSON 中的模式,所以我在 php 中删除它strstr(first data ocurrence)

但后来我有这个...

    <Table diffgr:id="Table1" msdata:rowOrder="0">
      <Numero>301</Numero>
      <Torre xml:space="preserve"></Torre>
      <Piso xml:space="preserve"></Piso>
      <Depto xml:space="preserve"></Depto>
      <Localidad>SAN ISIDRO</Localidad>
      <eMail/>
      <Provincia>Buenos Aires</Provincia>
    </Table>
    <Table diffgr:id="Table2" msdata:rowOrder="1">
      <Numero>34</Numero>
      <Torre xml:space="preserve"></Torre>
      <Piso xml:space="preserve"></Piso>
      <Depto xml:space="preserve"></Depto>
      <Localidad>DON TORCUATO</Localidad>
      <eMail/>
      <Provincia>Buenos Aires</Provincia>
  </Table>

我需要删除所有标签属性,diffgr:id="Table2"这样我就可以干净地将其转换为 JSON。我做了一些替换,str_replace(xml:space="preserve", "")但我仍然有具有可变内容的属性,例如msdata:rowOrder="0"

我认为这是做最后一件事的最好方法,preg_replace但我有两个问题:

  • 我对正则表达式不是很好,我发现的正则表达式生成器都让我“留下”一个字符串而不是删除
  • 即使我尝试并尝试直到我得到“id”和“row”的正确正则表达式,我也会觉得做几轮替换然后2个正则表达式是非常低效的。我只粘贴了 2 个项目,但响应可能有数百个,并且 Web 服务的 CURL 已经花费了很多时间,并且代理会受到很多点击,我需要尽可能地优化它。

有没有更好的方法可以转换 <Table diffgr:id="Table**N**" msdata:rowOrder="**N**"><Table>甚至更好地删除 ''... 之后的所有内容,或者甚至更好地将原始 SOAP XML 转换为 JSON 只需一个神奇的步骤:P?

4

0 回答 0