<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:s="http://www.w3.org/2000/svg">
    <script><![CDATA[
        function createSVGElement(name, attrs, parentElement) {
            const svgNamespace = "http://www.w3.org/2000/svg";
            var element = document.createElementNS(svgNamespace, name);

            for (var key in attrs)
                element.setAttribute(key, attrs[key]);

            parentElement.appendChild(element);
            return element;
        }

        function createHTMLElement(name) {
            const xhtmlNamespace = "http://www.w3.org/1999/xhtml";
            return document.createElementNS(xhtmlNamespace, name);
        }

        var root = document.documentElement;

        var foreignObject1 = createSVGElement("foreignObject", { x: 10, y: 10, width: 100, height: 100 }, root);
        foreignObject1.appendChild(createHTMLElement("div"));
        foreignObject1.lastChild.innerHTML =
            "<h2>ABC</h2>" +
            "<table style='border: 1px solid black;'>" +
                "<thead>" +
                    "<tr>" +
                        "<th>A</th>" +
                        "<th>B</th>" +
                        "<th>C</th>" +
                    "</tr>" +
                "</thead>" +
            "</table>";


        var foreignObject2 = createSVGElement("foreignObject", { x: 120, y: 10, width: 100, height: 100 }, root);
        foreignObject2.appendChild(createHTMLElement("h:div"));
        foreignObject2.lastChild.innerHTML =
            "<h:h2>DEF</h:h2>" +
            "<h:table style='border: 1px solid black;'>" +
                "<h:thead>" +
                    "<h:tr>" +
                        "<h:th>D</h:th>" +
                        "<h:th>E</h:th>" +
                        "<h:th>F</h:th>" +
                    "</h:tr>" +
                "</h:thead>" +
            "</h:table>";

        var foreignObject3 = createSVGElement("foreignObject", { x: 10, y: 120, width: 100, height: 100 }, root);
        foreignObject3.appendChild(createHTMLElement("h:div"));
        foreignObject3.lastChild.innerHTML = 
            "<svg>" +
                "<rect width='100' height='100' fill='green'/>" +
            "</svg>";

        var foreignObject4 = createSVGElement("foreignObject", { x: 120, y: 120, width: 100, height: 100 }, root);
        foreignObject4.appendChild(createHTMLElement("h:div"));
        foreignObject4.lastChild.innerHTML = 
            "<s:svg>" +
                "<s:rect width='100' height='100' fill='green'/>" +
            "</s:svg>";

        var svg1 = createSVGElement("svg", { }, root);
        var g1 = createSVGElement("g", { transform: 'translate(10, 230)' }, svg1);
        g1.innerHTML = "<rect width='100' height='100' fill='green'/>";

        var svg2 = createSVGElement("s:svg", { }, root);
        var g2 = createSVGElement("s:g", { transform: 'translate(120, 230)' }, svg2);
        g2.innerHTML = "<s:rect width='100' height='100' fill='green'/>";
    ]]></script>
</svg>
