SimpleXML:根据子元素的内容选择父节点

问题描述 投票:0回答:1

这应该是一件容易的事,但我没有使它起作用:在下面的代码片段中,我想选择一个<WebFilterCategory>节点,该节点的<Name>子节点的值为“ Categoryname2”:

<?php
$xmlstring = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<Request>
  <Login>
    <UserName>admin</UserName>
    <Password>admin</Password>
  </Login>
  <Set Operation="get">
    <WebFilterCategory transactionid="">
      <Name>Categoryname1</Name>
      <Classification>Objectionable</Classification>
      <DomainList>
        <Domain>example1.com</Domain>
        <Domain>example2.com</Domain>
      </DomainList>
    </WebFilterCategory>
    <WebFilterCategory transactionid="">
        <Name>Categoryname2</Name>
        <Classification>Objectionable</Classification>
        <DomainList>
            <Domain>example1.org</Domain>
            <Domain>example2.org</Domain>
        </DomainList>
    </WebFilterCategory>
  </Set>
</Request>
XML;

$xml = simplexml_load_string( $xmlstring ) or die("Error: Cannot create object");
foreach ($xml->query('//WebFilterCategory/Name[contains(., "Categoryname2")]') as $category) {
    print_r($xmlstring);
}
?>

也许,也有一个更精简的查询来获得所需的结果。

php xml xpath simplexml
1个回答
0
投票

您要查找的方法不是query,而是xpath

然后您可以更新路径以匹配名称包含Categoryname2的WebFilterCategory>

//WebFilterCategory[Name[contains(., "Categoryname2")]]' 
© www.soinside.com 2019 - 2024. All rights reserved.