PHP DOMDocument loadhtml。如何强制不更改标记?
PHP DOMDocument loadhtml. How force not to change markup?
大家好,阅读本文:)
我的问题是 $dom_doc = new DOMDocument("1.0", "utf-8")->loadHTML($doc)
$doc 看起来像:
...
<images>
<img>
<file>myfile.jpg</file>
<desc>My file description</desc>
</img>
<img>
<file>myfile.jpg</file>
<desc>My file description</desc>
</img>
</images>
...
loadHTML 将此标签转换为单个 html 标签(img
、link
等)
...
<images>
<img/>
<file>myfile.jpg</file>
<desc>My file description</desc>
<img/>
<file>myfile.jpg</file>
<desc>My file description</desc>
</images>
...
我应该怎么做才能强制使用配对标签?
也许 loadXML()
,但它不想正确使用 xpath。通过选择器“//images”,显示没有找到任何内容。所以我更喜欢使用 loadHTML
()
这不是 HTML 而是 XML,如果您将其加载为 HTML,则 DOM 解析器必须根据 HTML 规则解析它并且这意味着例如 img
没有结束标记。
我希望你有一些命名空间定义 XML。如果是这种情况,您将必须为该命名空间注册一个前缀。
$xml = <<<'XML'
<images xmlns="urn:some-namespace">
<img>
<file>myfile.jpg</file>
<desc>My file description</desc>
</img>
</images>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$xpath->registerNamespace('x', 'urn:some-namespace');
foreach ($xpath->evaluate('//x:images/x:img') as $img) {
var_dump(
[
'file' => $xpath->evaluate('string(x:file)', $img),
'desc' => $xpath->evaluate('string(x:desc)', $img)
]
);
}
输出:
array(2) {
["file"]=>
string(10) "myfile.jpg"
["desc"]=>
string(19) "My file description"
}
大家好,阅读本文:)
我的问题是 $dom_doc = new DOMDocument("1.0", "utf-8")->loadHTML($doc)
$doc 看起来像:
...
<images>
<img>
<file>myfile.jpg</file>
<desc>My file description</desc>
</img>
<img>
<file>myfile.jpg</file>
<desc>My file description</desc>
</img>
</images>
...
loadHTML 将此标签转换为单个 html 标签(img
、link
等)
...
<images>
<img/>
<file>myfile.jpg</file>
<desc>My file description</desc>
<img/>
<file>myfile.jpg</file>
<desc>My file description</desc>
</images>
...
我应该怎么做才能强制使用配对标签?
也许 loadXML()
,但它不想正确使用 xpath。通过选择器“//images”,显示没有找到任何内容。所以我更喜欢使用 loadHTML
()
这不是 HTML 而是 XML,如果您将其加载为 HTML,则 DOM 解析器必须根据 HTML 规则解析它并且这意味着例如 img
没有结束标记。
我希望你有一些命名空间定义 XML。如果是这种情况,您将必须为该命名空间注册一个前缀。
$xml = <<<'XML'
<images xmlns="urn:some-namespace">
<img>
<file>myfile.jpg</file>
<desc>My file description</desc>
</img>
</images>
XML;
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
$xpath->registerNamespace('x', 'urn:some-namespace');
foreach ($xpath->evaluate('//x:images/x:img') as $img) {
var_dump(
[
'file' => $xpath->evaluate('string(x:file)', $img),
'desc' => $xpath->evaluate('string(x:desc)', $img)
]
);
}
输出:
array(2) {
["file"]=>
string(10) "myfile.jpg"
["desc"]=>
string(19) "My file description"
}