private void WriteAttributes(Member[] members, Member anyAttribute, string elseCall, string firstParam)
{
int count = 0;
Member xmlnsMember = null;
ArrayList attributes = new ArrayList();
Writer.WriteLine("while (Reader.MoveToNextAttribute()) {");
Writer.Indent++;
for (int i = 0; i < members.Length; i++)
{
Member member = (Member)members[i];
if (member.Mapping.Xmlns != null)
{
xmlnsMember = member;
continue;
}
if (member.Mapping.Ignore)
continue;
AttributeAccessor attribute = member.Mapping.Attribute;
if (attribute == null) continue;
if (attribute.Any) continue;
attributes.Add(attribute);
if (count++ > 0)
Writer.Write("else ");
Writer.Write("if (");
if (member.ParamsReadSource != null)
{
Writer.Write("!");
Writer.Write(member.ParamsReadSource);
Writer.Write(" && ");
}
if (attribute.IsSpecialXmlNamespace)
{
WriteXmlNodeEqual("Reader", attribute.Name, XmlReservedNs.NsXml);
}
else
WriteXmlNodeEqual("Reader", attribute.Name, attribute.Form == XmlSchemaForm.Qualified ? attribute.Namespace : "");
Writer.WriteLine(") {");
Writer.Indent++;
WriteAttribute(member);
Writer.Indent--;
Writer.WriteLine("}");
}
if (count > 0)
Writer.Write("else ");
if (xmlnsMember != null)
{
Writer.WriteLine("if (IsXmlnsAttribute(Reader.Name)) {");
Writer.Indent++;
Writer.Write("if (");
Writer.Write(xmlnsMember.Source);
Writer.Write(" == null) ");
Writer.Write(xmlnsMember.Source);
Writer.Write(" = new ");
Writer.Write(xmlnsMember.Mapping.TypeDesc.CSharpName);
Writer.WriteLine("();");
//Writer.Write(xmlnsMember.ArraySource);
Writer.Write("((" + xmlnsMember.Mapping.TypeDesc.CSharpName + ")" + xmlnsMember.ArraySource + ")");
Writer.WriteLine(".Add(Reader.Name.Length == 5 ? \"\" : Reader.LocalName, Reader.Value);");
Writer.Indent--;
Writer.WriteLine("}");
Writer.WriteLine("else {");
Writer.Indent++;
}
else
{
Writer.WriteLine("if (!IsXmlnsAttribute(Reader.Name)) {");
Writer.Indent++;
}
if (anyAttribute != null)
{
Writer.Write(typeof(XmlAttribute).FullName);
Writer.Write(" attr = ");
Writer.Write("(");
Writer.Write(typeof(XmlAttribute).FullName);
Writer.WriteLine(") Document.ReadNode(Reader);");
Writer.WriteLine("ParseWsdlArrayType(attr);");
WriteAttribute(anyAttribute);
}
else
{
Writer.Write(elseCall);
Writer.Write("(");
Writer.Write(firstParam);
if (attributes.Count > 0)
{
Writer.Write(", ");
string qnames = "";
for (int i = 0; i < attributes.Count; i++)
{
AttributeAccessor attribute = (AttributeAccessor)attributes[i];
if (i > 0)
qnames += ", ";
qnames += attribute.IsSpecialXmlNamespace ? XmlReservedNs.NsXml : (attribute.Form == XmlSchemaForm.Qualified ? attribute.Namespace : "") + ":" + attribute.Name;
}
WriteQuotedCSharpString(qnames);
}
Writer.WriteLine(");");
}
Writer.Indent--;
Writer.WriteLine("}");
Writer.Indent--;
Writer.WriteLine("}");
}