【问题标题】:How to return full set of child nodes based on search of XML file如何根据 XML 文件的搜索返回完整的子节点集
【发布时间】:2019-08-28 16:44:31
【问题描述】:

我正在尝试搜索以下结构的 XML 文件:

<Root>
   <Record>
      <Filenumber>12314123</Filenumber>
      <StatusEN>Closed</StatusEN>
      <StatusDate>02 Nov 2019</StatusDate>
   </Record>

   <Record>
      <Filenumber>0678672301</Filenumber>
      <StatusEN>Closed</StatusEN>
      <StatusDate>02 Nov 2019</StatusDate>
   </Record>

</Root>

我想根据文件编号进行搜索,但返回匹配的所有 3 个节点和值。

我在努力

$q = '12314123';
$file = "status.xml";

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->Load($file);
$xpath = new DOMXPath($doc);
$query = "/Root/Record/Filenumber[contains(text(), '$q')]";
 $entries = $xpath->query($query);

foreach ($entries as $entry) {

     echo $entry->parentNode->nodeValue  ;

  }

这似乎返回了我想要的所有,但在一个字符串中。如何将它们作为单独的变量返回,或者以数组或 JSON 形式返回?

【问题讨论】:

    标签: php xml xpath


    【解决方案1】:

    DOMNodeList or DOMNodeElement 不知道怎么变成数组。这就是为什么我们必须亲自动手:

    foreach ($entries as $entry) {
        $result = [];
        foreach ($entry->parentNode->childNodes as $node) {
            $result[$node->nodeName] = $node->nodeValue;
        }
    
        var_dump($result);
    }
    

    【讨论】:

    • 你是明星。实际上,我在早期尝试中使用了这种方法,但是将它与 simplexml 结合起来,当我将它引入我的(大)XML 文件时,它就被轰炸了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多