DOMDocument-> documentURI属性的目的是什么?

时间:2010-10-23 10:34:58

标签: php domdocument

此处是文档链接:http://php.net/manual/en/class.domdocument.php#domdocument.props.documenturi

但是我不明白这个设置是否为此对象显示的值,或者是用户可以更改的设置?

这个值对loadHTML metod的html解析有什么影响吗?它可以用来绝对解析文档中的所有相对链接吗?

2 个答案:

答案 0 :(得分:3)

好的,我希望我能正确解释。

以下是documentUri的{​​{3}}:

  在DOM Level 3中引入的

documentURI类型DOMString

     

文档的位置,如果未定义或文档是使用DOMImplementation.createDocument创建的,则为null。设置此属性时不执行词法检查;使用Node.baseURI时,这可能会导致返回null值。

     

请注意,当Document支持“HTML”[DOM Level 2 HTML]功能时,HTML BASE元素的href属性在计算Node.baseURI时优先于此属性。

这对您意味着什么?

  

但是我不明白这个设置是否为此对象显示的值,或者是用户可以更改的设置?

它是文档的URI。如果您加载远程URI(例如此页面),它将包含远程URI,例如当前显示在浏览器地址栏中的网址。该值是公开的,因此它是可写的。

  

这个值对loadHTML metod的html解析有什么影响吗?

理论上,是的。实际上,这取决于您的W3C DOM Interface specification

  

它可以用来绝对解析文档中的所有相对链接吗?

不自动。但是你可以使用它将它手动添加到以路径开头的任何链接。当然,您需要实现逻辑来检查href值是否需要自己扩展。

答案 1 :(得分:1)

PHP手册中详细解释了DOMDocuemnt::$documentURI property

  

文档的位置,如果未定义,则为NULL。

如果从某个位置加载文档,则设置为公共属性。这通常是分别在"file:///C:/Tests/dom/data/file1.xml""data://text/html;encoding=base64,PHA+aGVsbG8gd29ybGQ8L3A+"中使用的文件名(例如DOMDocument::load())或URI(DOMDocument::loadHTMLFile())。

如果加载XML字符串(DOMDocument::loadXML()),则documentURI是当前工作目录。

如果您加载HTML字符串(DOMDocument::loadHTML()),则documentURINULL,如果该HTML中有<base href="">元素,则无关紧要。

示例:

<?php
/**
 * what is the purpose of DOMDocument->documentURI property?
 * @link https://stackoverflow.com/q/4003543/367456
 */

$doc = new DOMDocument();

$doc->load(__DIR__ . '/data/file1.xml');
var_dump($doc->documentURI); # "file:///C:/Tests/dom/data/file1.xml"

$doc->loadHTMLFile(__DIR__ . '/data/file1.html');
var_dump($doc->documentURI); # "file:///C:/Tests/dom/data/file1.html"

$doc->loadXML('<p>hello world</p>');
var_dump($doc->documentURI); # "file:///C:/Tests/dom/"  (current working directory)

$doc->loadHTML('<p>hello world</p>');
var_dump($doc->documentURI); # NULL

$doc->loadHTML('<base href="http://example.com/base/"><i>test</i>');
var_dump($doc->documentURI); # NULL

$doc->loadHTMLFile('data://text/html;encoding=base64,' . base64_encode('<p>hello world</p>'));
var_dump($doc->documentURI); # "data://text/html;encoding=base64,PHA+aGVsbG8gd29ybGQ8L3A+"
  

警告: 此属性可能是在DOM Core Level 3.0规范(与DOMNode::$baseUri一起)之后建模的,但是那个DOM Core Level(一个如此)名为功能版)的是not supported by PHP's DOMDocument

此属性可用于设置/解析HTML文档的基URI。如果是NULL或空字符串,则需要提供自己的字符串。有关解析文档中/的链接的示例,请参阅problem with adding root path using php domdocument以获取更多信息。