11import '../../xml/nodes/attribute.dart' ;
2+ import '../../xml/nodes/document.dart' ;
3+ import '../../xml/nodes/document_fragment.dart' ;
24import '../../xml/nodes/element.dart' ;
35import '../../xml/nodes/node.dart' ;
46import '../../xml/nodes/processing.dart' ;
@@ -169,7 +171,13 @@ XPathSequence _fnSerialize(
169171 XPathContext context,
170172 XPathSequence arg, [
171173 Object ? params,
172- ]) => throw UnimplementedError ('fn:serialize' );
174+ ]) {
175+ // TODO: Add support for serialization parameters
176+ final result = arg
177+ .map ((item) => item is XmlNode ? item.toXmlString () : xsString.cast (item))
178+ .join ();
179+ return XPathSequence .single (result);
180+ }
173181
174182/// https://www.w3.org/TR/xpath-functions-31/#func-parse-xml
175183const fnParseXml = XPathFunctionDefinition (
@@ -185,8 +193,10 @@ const fnParseXml = XPathFunctionDefinition(
185193 function: _fnParseXml,
186194);
187195
188- XPathSequence _fnParseXml (XPathContext context, String ? arg) =>
189- throw UnimplementedError ('fn:parse-xml' );
196+ XPathSequence _fnParseXml (XPathContext context, String ? arg) {
197+ if (arg == null ) return XPathSequence .empty;
198+ return XPathSequence .single (XmlDocument .parse (arg));
199+ }
190200
191201/// https://www.w3.org/TR/xpath-functions-31/#func-parse-xml-fragment
192202const fnParseXmlFragment = XPathFunctionDefinition (
@@ -202,8 +212,10 @@ const fnParseXmlFragment = XPathFunctionDefinition(
202212 function: _fnParseXmlFragment,
203213);
204214
205- XPathSequence _fnParseXmlFragment (XPathContext context, String ? arg) =>
206- throw UnimplementedError ('fn:parse-xml-fragment' );
207-
208215XmlNode _defaultToContextItem (XPathContext context) =>
209216 xsNode.cast (context.item);
217+
218+ XPathSequence _fnParseXmlFragment (XPathContext context, String ? arg) {
219+ if (arg == null ) return XPathSequence .empty;
220+ return XPathSequence .single (XmlDocumentFragment .parse (arg));
221+ }
0 commit comments