如何获取一个类中文本的json数组?
如何获取一个类中文本的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)));
如何获取一个类中文本的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")));
以上就是解决这个问题的方法。通过修复代码中的错误和问题,可以得到预期的结果。如果还有其他问题,可以参考给出的链接继续讨论。
问题的原因是提供的HTML代码不符合要求,导致无法获取指定class内的文本内容。解决方法是修复HTML代码,确保它是有效的。
具体的解决方法是通过使用DOMDocument和DOMXPath类来遍历HTML节点,获取指定class内的文本内容。代码通过查询包含指定class的元素,并将其文本内容添加到结果数组中。最后,将结果数组转换为JSON格式,输出给用户。
需要注意的是,解决方法要求PHP版本大于等于5.3。如果代码返回一个空数组,那说明HTML代码中没有符合条件的元素。如果发现这种输出,说明代码基本上是正确的,问题可能出在HTML代码本身上,与遍历节点无关。要解决这个问题,需要修复HTML代码,确保它是有效的。
总之,通过修复HTML代码,我们可以获取指定class内的文本内容,并将其转换为JSON格式输出。这个解决方法适用于PHP版本大于等于5.3的情况。