【问题标题】:PHP, XML - Get child nodes and their attributesPHP, XML - 获取子节点及其属性
【发布时间】:2011-06-22 08:05:03
【问题描述】:

如何从这个 XML 文件中获取所有“座位”子节点及其属性?

   <seatmap id="1">
      <seat row="A" seatnum="01" available="1" />
      <seat row="A" seatnum="02" available="1" />
      <seat row="A" seatnum="03" available="1" />
      <seat row="A" seatnum="04" available="1" />
      <seat row="A" seatnum="05" available="1" />
    </seatmap>

我有不同的座位图,所以我想通过 ID 查询来获取它们 然后将所有“座位”节点及其属性分配给变量。

到目前为止,我一直在使用 DOM 方法,但也许 simpleXML 或 XPath 会更容易,因为它真的 当您从 DOMDocumet、DOMElement、DOMNode 向下钻取时会感到困惑。

任何帮助都会很棒,干杯!

【问题讨论】:

    标签: php xml dom codeigniter


    【解决方案1】:
    $XML = <<<XML
    <parent>
       <seatmap id="1">
          <seat row="A" seatnum="01" available="1" />
          <seat row="A" seatnum="02" available="1" />
          <seat row="A" seatnum="03" available="1" />
          <seat row="A" seatnum="04" available="1" />
          <seat row="A" seatnum="05" available="1" />
        </seatmap>
    </parent>
    XML;
    
    $xml_nodes = new SimpleXMLElement($XML);
    
    $nodes = $xml_nodes->xpath('//seatmap[@id = "1"]/seat'); // Replace the ID value with whatever seatmap id you're trying to access
    
    foreach($nodes as $seat)
    {
        // You can then access: $seat['row'], $seat['seatnum'], $seat['available']
    }
    

    【讨论】:

    • 只有seatmap 是一级节点才有效,但无论如何+1 :)
    • @Tim Cooper 如何将 xml 文件传递​​给 simplexmlelement 类?
    • @RIKL: $xml_nodes = new SimpleXMLElement($filename, 0, true);.
    【解决方案2】:

    使用 DOM 可以轻松完成:

    $dom = new DOMDocument;
    $dom->load('xmlfile.xml');
    $xpath = new DOMXPath($dom);
    
    $seats = $xpath->query('//seatmap[@id="1"]/seat');
    if ($seats->length) {
        foreach ($seats as $seat) {
            echo "row: ".$seat->getAttribute('row').PHP_EOL;
            echo "seatnum: ".$seat->getAttribute('seatnum').PHP_EOL;
            echo "available: ".$seat->getAttribute('available').PHP_EOL;
        }
    } else {
        die('seatmap not found or is empty');
    }
    

    【讨论】:

      猜你喜欢
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多