В xml нет ничего плохого - он разбирается нормально.Проблема заключается в том, как вы пишете свой XML.
Код writer.WriteStartElement(reader.Name);
не работает, где reader.Name
возвращает строку типа "app: control" - у вас не может быть двоеточий в имени элемента.
Если xml имеет двоеточия в имени тега, это потому, что бит перед двоеточием указывает, какому пространству имен принадлежит тег.
Если вы замените строки:
case XmlNodeType.Element:
writer.WriteStartElement(reader.Name);
break;
с
case XmlNodeType.Element:
writer.WriteStartElement(reader.Prefix, reader.LocalName, reader.NamespaceURI);
break;
Ваш код должен запускаться и нормально анализировать XML.
Однако вы обнаружите, что выведенный xml не тот, который вам нужен, так что код по-прежнему будет нуждатьсянемного работы.