static void ConvertAndAddElement( ElementSyntaxBase syntax, Func <string, XNamespace> prefixToNamespace, XContainer parent) { prefixToNamespace = AddNamespaceDeclarations(syntax, prefixToNamespace); var element = new XElement(ResolveName(prefixToNamespace, syntax.Name.Text, true)); foreach (var attrSyntax in syntax.Attributes) { element.Add(new XAttribute(ResolveName(prefixToNamespace, attrSyntax.Name.Text, false), attrSyntax.Value)); } ConvertAndAddNodes( element, syntax.Nodes, prefixToNamespace); parent?.Add(element); }
static Func <string, XNamespace> AddNamespaceDeclarations( ElementSyntaxBase syntax, Func <string, XNamespace> prefixToNamespace) { foreach (var attrSyntax in syntax.Attributes) { var attrKey = attrSyntax.Name.Text; var attrNsDeclStart = "xmlns:"; if (attrKey.StartsWith(attrNsDeclStart)) { var nsPrefix = attrKey.Substring(attrNsDeclStart.Length); var ns = XNamespace.Get(attrSyntax.Value); var next = prefixToNamespace; prefixToNamespace = p => p == nsPrefix ? ns : next(p); } else if (attrKey == "xmlns") { var ns = XNamespace.Get(attrSyntax.Value); var next = prefixToNamespace; prefixToNamespace = p => string.IsNullOrEmpty(p) ? ns : next(p); } } return(prefixToNamespace); }
public UxElement(ElementSyntaxBase syntax) { _syntax = syntax ?? throw new ArgumentNullException(nameof(syntax)); _name = _syntax.Name; _isEmpty = syntax.IsEmpty; }