diff --git a/Tests/LibWeb/Text/expected/HTML/get-innerHTML-xml.txt b/Tests/LibWeb/Text/expected/HTML/get-innerHTML-xml.txt
new file mode 100644
index 00000000000..7ef22e9a431
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/HTML/get-innerHTML-xml.txt
@@ -0,0 +1 @@
+PASS
diff --git a/Tests/LibWeb/Text/input/HTML/get-innerHTML-xml.html b/Tests/LibWeb/Text/input/HTML/get-innerHTML-xml.html
new file mode 100644
index 00000000000..0a81407376c
--- /dev/null
+++ b/Tests/LibWeb/Text/input/HTML/get-innerHTML-xml.html
@@ -0,0 +1,10 @@
+
+
+
diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp
index ab966e0a792..25e329e80e2 100644
--- a/Userland/Libraries/LibWeb/DOM/Node.cpp
+++ b/Userland/Libraries/LibWeb/DOM/Node.cpp
@@ -1490,6 +1490,17 @@ WebIDL::ExceptionOr Node::serialize_fragment(DOMParsing::RequireWellForm
return HTML::HTMLParser::serialize_html_fragment(*this, HTML::HTMLParser::SerializableShadowRoots::No, {}, fragment_serialization_mode);
// 3. Return the XML serialization of node given require well-formed.
+ // AD-HOC: XML serialization algorithm returns the "outer" XML serialization of the node.
+ // For inner, concatenate the serialization of all children.
+ if (fragment_serialization_mode == FragmentSerializationMode::Inner) {
+ StringBuilder markup;
+ for_each_child([&markup, require_well_formed](auto& child) {
+ auto child_markup = DOMParsing::serialize_node_to_xml_string(child, require_well_formed).release_value_but_fixme_should_propagate_errors();
+ markup.append(child_markup.bytes_as_string_view());
+ return IterationDecision::Continue;
+ });
+ return MUST(markup.to_string());
+ }
return DOMParsing::serialize_node_to_xml_string(*this, require_well_formed);
}