PHP 和 XPath 循环

标签 php soap xpath namespaces xml-namespaces

谢谢大家。我对我有时愚蠢的问题有一些很好的答案,所以再次感谢你。

我正在尝试使用 PHP、Xpath(命名空间)和 SimpleXML 解析 SOAP 响应。下面是响应的片段。我需要做的是遍历每个 <ns1:file></ns1:file>并将其添加到数据库中。但我不知道该怎么做。请帮忙!

命名空间的东西

                $x = simplexml_load_string($response);    
                $x->registerXPathNamespace('ns1', 'http://ws.icontent.idefense.com/V3/2');

回复如下:
          <ns1:mal_files>
              <ns1:file>
                 <ns1:id>2895144</ns1:id>
                 <ns1:md5>2189c3d3857ba0cabd19c8aa031d63cd</ns1:md5>
                 <ns1:sha1>c20b26148caa059ecf85e9b29df4e28e8354d655</ns1:sha1>
                 <ns1:path>%WINDIR%\Temp\Temporary Internet Files\Content.IE5\K9ANOPQB\1219831[1].htm</ns1:path>
                 <ns1:size>110</ns1:size>
                 <ns1:code_available>true</ns1:code_available>
                 <ns1:len_char>fixed</ns1:len_char>
              </ns1:file>
              <ns1:file>
                 <ns1:id>2895147</ns1:id>
                 <ns1:md5>a533825ef1752630a300125b3eef6825</ns1:md5>
                 <ns1:sha1>ec7feb1414b3c2e720f6c06e2750421b73634f87</ns1:sha1>
                 <ns1:path>%WINDIR%\Temp\Temporary Internet Files\Content.IE5\4PMB8T67\bg[1].jpg</ns1:path>
                 <ns1:size>707</ns1:size>
                 <ns1:code_available>true</ns1:code_available>
                 <ns1:len_char>fixed</ns1:len_char>
              </ns1:file>
              <ns1:file>
                 <ns1:id>2895155</ns1:id>
                 <ns1:md5>c88724e985efcc82173c0d3aa0b77dfd</ns1:md5>
                 <ns1:sha1>ecc042ca06aac988cd4593bb2b25fa39c4b2a819</ns1:sha1>
                 <ns1:path>%WINDIR%\Prefetch\24604775.EXE-3ADEC0C2.pf</ns1:path>
                 <ns1:size>44940</ns1:size>
                 <ns1:code_available>true</ns1:code_available>
                 <ns1:len_char>fixed</ns1:len_char>
              </ns1:file>
              <ns1:file>
                 <ns1:id>2895158</ns1:id>
                 <ns1:md5>422a011793af6195ea517c2c4a26bdbc</ns1:md5>
                 <ns1:sha1>f449240c091c27e2531342d6b291d6a7e4655834</ns1:sha1>
                 <ns1:path>%WINDIR%\Temp\Temporary Internet Files\Content.IE5\KPYV0TM7\gamesleap[1].png</ns1:path>
                 <ns1:size>2676</ns1:size>
                 <ns1:code_available>true</ns1:code_available>
                 <ns1:len_char>fixed</ns1:len_char>
              </ns1:file>
         </ns1:mal_files>

PHP代码
$md5 = $x->xpath('//ns1:mal_files/ns1:file/ns1:md5'); // Returns array :(

PHP 代码为每个 <ns1:file></ns1:file> 返回一个包含所有 MD5 的数组。这不是我需要的。

我需要为每个 <ns1:file> 循环遍历每个(节点?)键控 <ns1:id>并添加所有关联元素(id、md5、sha1 等)作为记录,然后移至下一个 <ns1:file>并重复。显然我正在使用的 PHP 返回一个数组,它在这里不起作用。

希望我已经把我的问题说清楚了......我感谢任何帮助。

谢谢!

最佳答案

您应该选择所有 ns1:file元素并遍历它们,在循环中检索您需要的每个值:

foreach($x->xpath('//ns1:mal_files/ns1:file) as $file) {
   $id = $file->xpath('ns1:id')[0];
   $md5 = $file->xpath('ns1:md5')[0];
    // etc.
}

关于PHP 和 XPath 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13713531/

相关文章:

c# - 在 C# 中调用 webservice 返回 Client found response content type of '' , but expected 'text/xml'

wcf - 什么是 WCF 以及它如何工作?

XSLT 1.0 : how to go for the "parent" axis

php - 在 sphinx 中添加 where 条件以及如何删除 sphinx 中的 setlimit

php - 调用 API 时出现 cURL 错误。 cURL 错误编号 :[60] SSL certificate prob: self signed certificate in certificate chain

php - 输出函数 mysql php

java - SOAP 中的 UDDI 示例

php - 如何从 DomDocument::saveHTML 中删除换行符

xpath - Saxon Xpath 命名空间

php - 使用 jquery ajax 更新 mysql