Example #1
0
        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);
        }
Example #2
0
 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);
 }
Example #3
0
 public UxElement(ElementSyntaxBase syntax)
 {
     _syntax  = syntax ?? throw new ArgumentNullException(nameof(syntax));
     _name    = _syntax.Name;
     _isEmpty = syntax.IsEmpty;
 }