1--TEST--
2HTMLDocument: Predefined namespaces
3--EXTENSIONS--
4dom
5--FILE--
6<?php
7
8$dom = DOM\HTMLDocument::createFromString(<<<HTML
9<!DOCTYPE html>
10<html>
11<head>
12    <title>Test</title>
13</head>
14<body>
15    <svg width="100" height="100" viewBox="0 0 4 2">
16        <rect id="rectangle" x="10" y="20" width="90" height="60">
17        </rect>
18    </svg>
19    <div>
20        <p>foo</p>
21    </div>
22    <math>
23        <!-- svg should be in the mathml namespace -->
24        <mtable id="table"><svg></svg></mtable>
25    </math>
26</body>
27</html>
28HTML);
29
30echo "--- Namespaces ---\n";
31$xpath = new DOM\XPath($dom);
32foreach ($xpath->query("//*[name()='body']//*") as $node) {
33    echo $node->nodeName, " ", $node->namespaceURI ?? "(NONE)", "\n";
34    foreach ($node->attributes as $attribute) {
35        echo "  Attribute: ", $attribute->nodeName, " ", $attribute->namespaceURI ?? "(NONE)", "\n";
36    }
37}
38
39echo "--- HTML serialization ---\n";
40echo $dom->saveHTML(), "\n";
41echo "--- XML serialization ---\n";
42echo $dom->saveXML();
43
44?>
45--EXPECT--
46--- Namespaces ---
47svg http://www.w3.org/2000/svg
48  Attribute: width (NONE)
49  Attribute: height (NONE)
50  Attribute: viewbox (NONE)
51rect http://www.w3.org/2000/svg
52  Attribute: id (NONE)
53  Attribute: x (NONE)
54  Attribute: y (NONE)
55  Attribute: width (NONE)
56  Attribute: height (NONE)
57DIV http://www.w3.org/1999/xhtml
58P http://www.w3.org/1999/xhtml
59math http://www.w3.org/1998/Math/MathML
60mtable http://www.w3.org/1998/Math/MathML
61  Attribute: id (NONE)
62svg http://www.w3.org/1998/Math/MathML
63--- HTML serialization ---
64<!DOCTYPE html><html><head>
65    <title>Test</title>
66</head>
67<body>
68    <svg width="100" height="100" viewbox="0 0 4 2">
69        <rect id="rectangle" x="10" y="20" width="90" height="60">
70        </rect>
71    </svg>
72    <div>
73        <p>foo</p>
74    </div>
75    <math>
76        <!-- svg should be in the mathml namespace -->
77        <mtable id="table"><svg></svg></mtable>
78    </math>
79
80</body></html>
81--- XML serialization ---
82<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
83<!DOCTYPE html>
84<html xmlns="http://www.w3.org/1999/xhtml"><head>
85    <title>Test</title>
86</head>
87<body>
88    <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewbox="0 0 4 2">
89        <rect id="rectangle" x="10" y="20" width="90" height="60">
90        </rect>
91    </svg>
92    <div>
93        <p>foo</p>
94    </div>
95    <math xmlns="http://www.w3.org/1998/Math/MathML">
96        <!-- svg should be in the mathml namespace -->
97        <mtable id="table"><svg/></mtable>
98    </math>
99
100</body></html>
101