tubos separadores separador pvc modernos hacer forma economica dividir corredizo con como colgante caseros carton biombo ambientes c# xml linq whitespace

c# - pvc - separadores de ambientes modernos



¿Por qué XmlReader omite todos los demás elementos si no hay un separador de espacios en blanco? (2)

¿Es posible que esté saltando una línea llamando a la función Read () dentro de la condición del bucle while y luego a la función ReadOuterXml () dentro del propio loop?

Estoy viendo un comportamiento extraño cuando intento analizar XML usando la clase LINQ XmlReader. Caso de prueba a continuación: parece que si uso (XElement)XNode.ReadFrom(xmlReader) o uno de los métodos de Read() en XmlReader, pierde los elementos de la segunda bar en el XML de entrada. Si se agrega algún espacio en blanco entre </bar> y <bar> entonces se analizará correctamente el segundo elemento de bar .

¿Alguien tiene una idea de por qué la secuencia de entrada se confunde y cómo solucionar este problema?

[Test] [Explicit] public void ShouldParseCorrectNumberOfElements() { var xml = @"<foo><bar>wtf</bar><bar>wtf2</bar></foo>"; XmlReader xmlReader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(xml))); int count = 0; xmlReader.MoveToContent(); while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "bar") { var element = xmlReader.ReadOuterXml(); Console.WriteLine("just got an " + element); count++; } } Assert.AreEqual(2, count); }


Está llamando a ReadOuterXml , que consumirá el elemento y colocará el "cursor" justo antes del siguiente elemento. A continuación, vuelve a llamar a Read , que mueve el cursor (por ejemplo, al nodo de texto dentro del elemento).

Aquí hay una alternativa a su bucle:

while (!xmlReader.EOF) { Console.WriteLine(xmlReader.NodeType); if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name == "bar") { var element = xmlReader.ReadOuterXml(); Console.WriteLine("just got an " + element); count++; } else { xmlReader.Read(); } }