如何获取一个类中文本的json数组?

24 浏览
0 Comments

如何获取一个类中文本的json数组?

在一个URL(www.foo.com/index.html)中的HTML片段:

...

foo

...

bar

...

baz

......

我想通过PHP获取所有类名为.name的文本,并将其转换为JSON,结果如下:

{"names":["foo","bar","baz"]}


这是我尝试过的代码:

function linkExtractor($html){
    $nameArr = array();
    $doc = new DOMDocument();
    $doc->loadHTML($html);
    $names = //我如何获取元素?
    foreach($names as $name) {
        array_push($nameArr, $name);
    }
    return $imageArr;
}
echo json_encode(array("names" => linkExtractor($html)));

0
0 Comments

如何获取一个类中文本的json数组?

这个问题的出现是因为代码中存在一些错误和问题,导致无法得到预期的结果。下面是对问题的原因和解决方法的整理:

问题的原因:

1. 代码中缺少参数,导致出现错误:Missing argument 2 for linkExtractor()。

2. 使用了DOMDocument::loadHTML()方法加载HTML时,出现了错误:htmlParseEntityRef: expecting ';' in Entity。

解决方法:

1. 为linkExtractor()函数添加第二个参数。

2. 在加载HTML之前,对HTML进行预处理,将特殊字符进行转义,以避免出现htmlParseEntityRef错误。

3. 使用DOMDocument::xpath()方法替代DOMDocument::query()方法。

下面是修改后的代码:

$html = "http://www.foo.com/index.html";
function linkExtractor($html, $classname){
    $nameArr = array();
    $doc = new DOMDocument();
    // 预处理HTML,转义特殊字符
    $html = htmlentities($html, ENT_QUOTES, 'UTF-8');
    $doc->loadHTML($html);
    $names = $doc->xpath("//*[='" . $classname . "']");
    foreach($names as $name) {
        array_push($nameArr, $name);
    }
    return $nameArr;
}
echo json_encode(array("names" => linkExtractor($html, ".name")));

以上就是解决这个问题的方法。通过修复代码中的错误和问题,可以得到预期的结果。如果还有其他问题,可以参考给出的链接继续讨论。

0
0 Comments

问题的原因是提供的HTML代码不符合要求,导致无法获取指定class内的文本内容。解决方法是修复HTML代码,确保它是有效的。

具体的解决方法是通过使用DOMDocument和DOMXPath类来遍历HTML节点,获取指定class内的文本内容。代码通过查询包含指定class的元素,并将其文本内容添加到结果数组中。最后,将结果数组转换为JSON格式,输出给用户。

需要注意的是,解决方法要求PHP版本大于等于5.3。如果代码返回一个空数组,那说明HTML代码中没有符合条件的元素。如果发现这种输出,说明代码基本上是正确的,问题可能出在HTML代码本身上,与遍历节点无关。要解决这个问题,需要修复HTML代码,确保它是有效的。

总之,通过修复HTML代码,我们可以获取指定class内的文本内容,并将其转换为JSON格式输出。这个解决方法适用于PHP版本大于等于5.3的情况。

0