static IList <KeyValuePair <XmlName, INode> > ParseXamlAttributes(XmlReader reader, out IList <KeyValuePair <string, string> > xmlns) { Debug.Assert(reader.NodeType == XmlNodeType.Element); var attributes = new List <KeyValuePair <XmlName, INode> >(); xmlns = new List <KeyValuePair <string, string> >(); for (var i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); //skip xmlns if (reader.NamespaceURI == "http://www.w3.org/2000/xmlns/") { xmlns.Add(new KeyValuePair <string, string>(reader.LocalName, reader.Value)); continue; } var namespaceUri = reader.NamespaceURI; if (reader.LocalName.Contains(".") && namespaceUri == "") { namespaceUri = ((IXmlNamespaceResolver)reader).LookupNamespace(""); } var propertyName = ParsePropertyName(new XmlName(namespaceUri, reader.LocalName)); if (propertyName.NamespaceURI == null && propertyName.LocalName == null) { continue; } object value = reader.Value; if (propertyName == XmlName.xTypeArguments) { value = TypeArgumentsParser.ParseExpression((string)value, (IXmlNamespaceResolver)reader, (IXmlLineInfo)reader); } var propertyNode = GetValueNode(value, reader); attributes.Add(new KeyValuePair <XmlName, INode>(propertyName, propertyNode)); } reader.MoveToElement(); return(attributes); }
static IList <KeyValuePair <XmlName, INode> > ParseXamlAttributes(XmlReader reader, out IList <KeyValuePair <string, string> > xmlns) { Debug.Assert(reader.NodeType == XmlNodeType.Element); var attributes = new List <KeyValuePair <XmlName, INode> >(); xmlns = new List <KeyValuePair <string, string> >(); for (var i = 0; i < reader.AttributeCount; i++) { reader.MoveToAttribute(i); //skip xmlns if (reader.NamespaceURI == "http://www.w3.org/2000/xmlns/") { xmlns.Add(new KeyValuePair <string, string>(reader.LocalName, reader.Value)); continue; } var namespaceUri = reader.NamespaceURI; if (reader.LocalName.Contains(".") && namespaceUri == "") { namespaceUri = ((IXmlNamespaceResolver)reader).LookupNamespace(""); } var propertyName = new XmlName(namespaceUri, reader.LocalName); object value = reader.Value; if (reader.NamespaceURI == "http://schemas.microsoft.com/winfx/2006/xaml") { switch (reader.Name) { case "x:Key": propertyName = XmlName.xKey; break; case "x:Name": propertyName = XmlName.xName; break; case "x:Class": case "x:FieldModifier": continue; default: Debug.WriteLine("Unhandled attribute {0}", reader.Name); continue; } } if (reader.NamespaceURI == "http://schemas.microsoft.com/winfx/2009/xaml") { switch (reader.Name) { case "x:Key": propertyName = XmlName.xKey; break; case "x:Name": propertyName = XmlName.xName; break; case "x:TypeArguments": propertyName = XmlName.xTypeArguments; value = TypeArgumentsParser.ParseExpression((string)value, (IXmlNamespaceResolver)reader, (IXmlLineInfo)reader); break; case "x:DataType": propertyName = XmlName.xDataType; break; case "x:Class": case "x:FieldModifier": continue; case "x:FactoryMethod": propertyName = XmlName.xFactoryMethod; break; case "x:Arguments": propertyName = XmlName.xArguments; break; default: Debug.WriteLine("Unhandled attribute {0}", reader.Name); continue; } } var propertyNode = GetValueNode(value, reader); attributes.Add(new KeyValuePair <XmlName, INode>(propertyName, propertyNode)); } reader.MoveToElement(); return(attributes); }