首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >getElementByTagName和getAttribute区分大小写

getElementByTagName和getAttribute区分大小写
EN

Stack Overflow用户
提问于 2014-05-02 19:11:21
回答 3查看 4K关注 0票数 3

我已经创建了一个简单的PHP脚本,它可以解析HTML文档,并使用getElementByTagName和getAttribute返回元标记。如果HTML标签不是小写的,那么它就不会返回标签的内容。例如:

代码语言:javascript
运行
复制
<title>My Title</title>

将返回"My Title“,但是

代码语言:javascript
运行
复制
<Title>My Title</Title>

代码语言:javascript
运行
复制
<TITLE>My Title</TITLE> 

将不返回任何内容。有没有什么简单的方法可以让它匹配标签而不管大小写?我猜它可能涉及到正则表达式。

下面是代码示例:

代码语言:javascript
运行
复制
$nodes = $doc->getElementsByTagName('title');
$heading = $doc->getElementsByTagName('h1');
$title = $nodes->item(0)->nodeValue;
$h1 = $heading->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
    $description = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'keywords')
    $keywords = $meta->getAttribute('content');
if($meta->getAttribute('name') == 'robots')
    $robots = $meta->getAttribute('content');
}
EN

Stack Overflow用户

发布于 2014-05-02 22:10:04

DOMDocument::loadHtml()将所有元素转换为小写(并删除名称空间)。下面是一个小演示:

代码语言:javascript
运行
复制
$html = <<<'HTML'
<html><Body><Title>My Title</Title></Body></html>
HTML;

$dom = new DOMDocument();
$dom->loadHtml($html);
echo $dom->saveHtml();

输出:https://eval.in/145538

代码语言:javascript
运行
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><title>My Title</title></body></html>

Xml区分大小写。因此,如果您将某些内容加载为XML,它将保持元素的原样:

代码语言:javascript
运行
复制
$html = <<<'HTML'
<html><Body><Title>My Title</Title></Body></html>
HTML;

$dom = new DOMDocument();
$dom->loadXml($html);
echo $dom->saveXml();

输出:https://eval.in/145539

代码语言:javascript
运行
复制
<?xml version="1.0"?>
<html><Body><Title>My Title</Title></Body></html>

这将影响DOM方法和Xpath:

代码语言:javascript
运行
复制
$html = <<<'HTML'
<html><Body><Title>My Title</Title></Body></html>
HTML;

$dom = new DOMDocument();
$dom->loadHtml($html);

var_dump(
  // One element "title"
  $dom->getElementsByTagName('title')->length
);

$xpath = new DOMXpath($dom);
var_dump(
  // "title" as string
  $xpath->evaluate('string(//title)')
);

输出:https://eval.in/145541

代码语言:javascript
运行
复制
int(1)
string(8) "My Title"
票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23426745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档