【问题标题】:How to extract mixed content in PHP DOMXpath?如何在 PHP DOMXpath 中提取混合内容?
【发布时间】:2013-03-25 00:49:10
【问题描述】:

我正在解析以下 HTML:

<ul class="man">
   <li>
      height
       <span>3.3"</span>
    </li>
    <li>
       weight
       <span>45kg</span>
    </li>
    <li>
       date born
       <span>1/12/1979</span>
    </li>

 </ul>

我正在使用下面的代码来解析上面的 HTML:

foreach($xpath->query("//ul[@class='man']/li") as $element)
{
       echo $element->nodeValue;

}

但是代码返回 &lt;li&gt;&lt;/li&gt; 内部的整个东西,高度为 3.3 英寸,重量为 45 公斤,而我需要这两个单独作为标签的高度和 3.3 英寸的值作为标签的重量和 45 公斤的值。

我可以使用 "//ul[@class='man']/ul/span" 获得第二个值,但无法在单独的变量中获取标签。

有解决这个问题的办法吗?

P.S: 无法更改标签值,因为它们来自 HTML 页面中的服务器。

【问题讨论】:

    标签: php parsing xpath domxpath


    【解决方案1】:

    您可以遍历&lt;li&gt; 的子代,第一个是包含(例如)height 标签的DOMText 对象,第二个是&lt;span&gt; DOMElement 对象:

    $data = array();
    
    foreach ($xpath->query("//ul[@class='man']/li") as $element) {
    
        foreach ($element->childNodes as $child) {
            $content = trim($child->nodeValue);
    
            if ($child instanceof DOMText && $content != '') {
                $key = $content;
            } elseif ($child instanceof DOMElement && $child->tagName == 'span') {
                $value = $content;
            }
        }
    
        if ($key !== null && $value !== null) {
            $data[$key] = $value;
        }
    }
    

    【讨论】:

    • 非常感谢代码完美运行,我解决了问题。我非常感谢你..
    猜你喜欢
    • 1970-01-01
    • 2018-04-23
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2014-08-19
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多