我如何:
例如在“<html><head><title>some title</title>some text</head>
...”上会产生nodeValue =“某些标题某些文本”,这是无关紧要的,因为我只需要标记属性,而不需要向我的数据库添加无关数据。
例如在“<html><body><div>some anchor</div>some text</body>
...”上会产生nodeValue =“某些锚定一些文本”“某些文本”与正文标记相关,我确实需要保留它并获取其他所有内容。
此外,我不想完全从dom文档中删除它们!
答案 0 :(得分:2)
这是无关紧要的,因为我只需要标签属性
我不确定您的示例中的属性在哪里。我不是PHP xpath实现专家。
但是,您可以尝试以下方法:
text()
xpath函数(例如"/html/head/text()"
)来获取文本节点,而不是标记答案 1 :(得分:1)
在这种情况下,也许像你这样的preg_match可能就是你所需要的?
preg_match( '/<head (.*)>/', $file_contents, $matches );
echo ( isset( $matches[1] ) ) ? $matches[1] : '';
答案 2 :(得分:0)
修改: 关于head元素 - 你只想获得head元素的属性,你可以使用xpath(“// head”)and then $head->attributes。
我不会直接回答你的问题,这个问题不是很详细,但我宁愿讲一个关于我自己经历的故事。如果您了解我给出的示例的含义,我相信您可以解决您的问题。
我从标签中了解到你想在工作中使用PHP。我最近遇到了类似的问题,我必须解析大约100个静态html文档,并提取部分信息以将其放入数据库中。最初我考虑过正则表达式,但随着我的进展,我发现这将是一项繁琐的工作。
所以我最终弄乱了PHP中的XPath和SimpleXML。
以下是我的结局:
$file_contents = file_get_contents( $file );
$dom = new DOMDocument;
$dom->loadHTML( $file_contents );
$document = simplexml_import_dom( $dom );
现在我有一个包含HTML代码的SimpleXML对象。这真的很棒 - 这就是它如何滚动:
假设您有以下HTML代码:
<div id="content">
<div class="description">
<dl>
<dt>Title</dt>
<dd>
<ul><li> first item </li> <li> second item</li></ul>
<p> a paragraph.. </p>
</dd>
</dl>
</div>
</div>
现在,您可以遍历所有&lt; dl&gt;你的代码中的元素,它们是div#description的子元素和div#的内容,就像那样:
foreach( $document->xpath( "//div[@id='content']/div[@class='description']/dl" ) as $element )
然后通过像这样的递归函数解析所有子节点:
function recurse( $parent )
{
echo '<' . $parent->getName() . '>' . "\n";
#echo $parent # you might want to strip any white spaces like \t and \n here
foreach( $parent->children() as $child )
{
if( count( $child->children() ) > 0 )
{
recurse( $child );
}
else
{
echo '<' . $child->getName() . '>';
echo $child;
echo '</' . $child->getName() . '>' . "\n";
}
}
echo '</' . $parent->getName() . '>' . "\n";
}
我希望我得到了帮助,祝你好运!