【发布时间】:2019-07-26 03:17:52
【问题描述】:
我有一个 index.html 文件,并且该文件中有 div 标签,我试图从 html 页面中的所有 div 标签中获取内容,但我只从第一个 div 标签中获取内容,我需要html页面中所有div的内容。
这是我的代码:
<?php
// Function to get the contents of an attribute of an HTML tag
function get_attribute_contents($element) {
$obj_attribute = array ();
foreach ( $element->attributes as $attribute ) {
$obj_attribute [$attribute->name] = $attribute->value;
}
return $obj_attribute;
}
// Function to get contents of a child element of an HTML tag
function get_child_contents($element) {
$obj_child = array ();
foreach ( $element->childNodes as $subElement ) {
if ($subElement->nodeType != XML_ELEMENT_NODE) {
if (trim ( $subElement->wholeText ) != "") {
$obj_child ["value"] = $subElement->wholeText;
}
} else {
if ($subElement->getAttribute ( 'id' )) {
$obj_child [$subElement->tagName . "#" . $subElement->getAttribute ( 'id' )] = get_tag_contents ( $subElement );
} else {
$obj_child [$subElement->tagName] = get_tag_contents ( $subElement );
}
}
}
return $obj_child;
}
// Function to get the contents of an HTML tag
function get_tag_contents($element) {
$obj_tag = array ();
if (get_attribute_contents ( $element )) {
$obj_tag ["attributes"] = get_attribute_contents ( $element );
}
if (get_child_contents ( $element )) {
$obj_tag ["child_nodes"] = get_child_contents ( $element );
}
return $obj_tag;
}
// Function to convert a DOM element to an object
function element_to_obj($element) {
$object = array ();
$tag = $element->tagName;
$object [$tag] = get_tag_contents ( $element );
return $object;
}
// Function to convert an HTML to a DOM element
function html_to_obj($html) {
$dom = new DOMDocument ();
$dom->loadHTML ( $html );
$docElement = $dom->documentElement;
return element_to_obj ( $dom->documentElement );
}
// Reading the contents of an HTML file
$html = file_get_contents ( 'index.html' );
header ( "Content-Type: text/plain" );
// Coverting the HTML to JSON
$output = json_encode ( html_to_obj ( $html ) );
// Writing the JSON output to an external file
$file = fopen ( "js_output.json", "w" );
fwrite ( $file, $output );
fclose ( $file );
echo "HTML to JSON conversion has been completed.\n";
echo "Please refer to json_output.json to view the JSON output.";
?>
html文件是:
<div class="issue-message">
Rename this package name to match the regular expression
'^[a-z]+(\.[a-z][a-z0-9]*)*$'.
<button class="button-link issue-rule icon-ellipsis-h little-spacer-left" aria-label="Rule Details"></button>
</div>
<div class="issue-message">
Replace this use of System.out or System.err by a logger.
<button class="button-link issue-rule icon-ellipsis-h little-spacer-left" aria-label="Rule Details"></button>
</div>
<div class="issue-message">
Replace this use of System.out or System.err by a logger.
<button class="button-link issue-rule icon-ellipsis-h little-spacer-left" aria-label="Rule Details"></button>
</div>
<div class="issue-
message">
Rename this package name to match the regular expression '^[a-z]+
(\.[a-z][a-z0-9]*)*$'.
<button
class="button-link issue-rule icon-ellipsis-h little-spacer-left" aria-label="Rule Details"></button>
</div>
<div class="issue-message">
Replace this use of System.out or System.err by a logger.
<button class="button-link issue-rule icon-ellipsis-h little-spacer-left" aria-label="Rule Details"></button>
</div>
作为以下文件中代码的输出,我将仅存在于第一个 div 标记中的内容的 json 转换为:
{
"html": {
"child_nodes": {
"body": {
"child_nodes": {
"p": {
"child_nodes": {
"value": "Issues found:"
}
},
"div": {
"attributes": {
"class": "issue-message"
},
"child_nodes": {
"value": "This block of commented-out lines of code should be removed.",
"button": {
"attributes": {
"class": "button-link issue-rule icon-ellipsis-h little-spacer-left",
"aria-label": "Rule Details"
}
}
}
}
}
}
}
}
}
【问题讨论】:
-
请格式化代码。
-
看,我们现在喜欢阅读您的代码。请在提交问题之前使用正确的格式。这对你来说是一个加分项。
标签: php html json dom html-parsing