Tengo un xml como este en la variable de cadena (cargar desde archivo)
<Data> <Name>Test & < test> </Name> </Data> cuando intento cargar este xml, obtuve la excepción "se produjo un error al analizar el nodo". Creo que esto se debe a & en la etiqueta de nombre. He buscado en Internet, pero todas las soluciones (por ejemplo SecurityElement.Escape ) escapan de los elementos xml principales también como mayor que gt y menor que lt y solo quiero reemplazar & en mi caso. Puedo iterar a través de xml y reemplazar solo la parte de datos, pero ¿hay alguna forma más corta?
AngleSharp tiene un analizador "XML" de corrección de errores que funciona más como un analizador HTML5 o de sopa de etiquetas que intenta corregir y corregir dichos errores de marcado. para su muestra
using System; using AngleSharp.Xml; using AngleSharp.Xml.Parser; namespace AngleSharpMalFormedXmlTest1 { class Program { static void Main(string[] args) { var malFormedXml = @"<Data> <Name>Test & < test> </Name> </Data>"; var doc = new XmlParser(new XmlParserOptions() { IsSuppressingErrors = true }).ParseDocument(malFormedXml); Console.WriteLine(doc.ToMarkup()); } } }yo obtengo
<Data> <Name>Test &< test> </Name> </Data>Pero una vez que abre su entrada a este tipo de XML mal formado, puede encontrarse fácilmente con conceptos erróneos e incompatibilidades o dependencia de herramientas que se pretendía evitar con el uso de un estándar W3C como XML.
Como no tiene control sobre la fuente, puede probar algunas expresiones regulares para convertirlo en un xml válido:
string xml = @"<Data> <Name>Test & test& &1 <aaa &</Name> </Data>"; xml = Regex.Replace(xml,@"&(?!\w+;)","&");esto regresará
<Data> <Name>Test & test& &1 <aaa &</Name> </Data>El XML presentado no está bien formado.
Puede usar la sección CData para hacer que su XML esté bien formado.
<Name> debe convertirse en <Name><![CDATA[</Name> debe convertirse en ]]></Name>XML bien formado
<Data> <Name><![CDATA[Test & < test> ]]></Name> </Data>