net name generate example comentarios c# asp.net xml xml-parsing linq-to-xml

name - xml comments c#



Analizar XML no ramificado en C# (2)

Obtengo XML de una máquina incrustada en el siguiente formato:

<?xml version="1.0" encoding="utf-8"?> <Horizon-Export> <BatchNo.>1</BatchNo.> <SpecimenID>CL1</SpecimenID> <OperatorName>Anuj</OperatorName> <SpecimenAge>1.00</SpecimenAge> <Grade>M12</Grade> <DateofCasting>01/09/2012</DateofCasting> <SpecimenShape>Cube</SpecimenShape> <SpecimenSize>150.00</SpecimenSize> <Area>22,500</Area> <Weight>10.0</Weight> <Density>1.00</Density> <TestDate>17/09/2012</TestDate> <TestTime>9:41:08 AM</TestTime> <BatchDate>17/09/2012</BatchDate> <UltimateForce> </UltimateForce> <UltimateStress> </UltimateStress> <Remarks>Pass</Remarks> <BatchNo.>1</BatchNo.> <SpecimenID>CL1</SpecimenID> <OperatorName>Anuj</OperatorName> <SpecimenAge>1.00</SpecimenAge> <Grade>M12</Grade> <DateofCasting>01/09/2012</DateofCasting> <SpecimenShape>Cube</SpecimenShape> <SpecimenSize>150.00</SpecimenSize> <Area>22,500</Area> <Weight>10.0</Weight> <Density>1.00</Density> <TestDate>17/09/2012</TestDate> <TestTime>9:47:10 AM</TestTime> <BatchDate>17/09/2012</BatchDate> <UltimateForce>25.3</UltimateForce> <UltimateStress>1.12</UltimateStress> <Remarks>Pass</Remarks> <BatchNo.>1</BatchNo.> <SpecimenID>CL1</SpecimenID> <OperatorName>Anuj</OperatorName> <SpecimenAge>1.00</SpecimenAge> <Grade>M12</Grade> <DateofCasting>01/09/2012</DateofCasting> <SpecimenShape>Cube</SpecimenShape> <SpecimenSize>150.00</SpecimenSize> <Area>22,500</Area> <Weight>10.0</Weight> <Density>1.00</Density> <TestDate>17/09/2012</TestDate> <TestTime>9:48:57 AM</TestTime> <BatchDate>17/09/2012</BatchDate> <UltimateForce>8.3</UltimateForce> <UltimateStress>0.37</UltimateStress> <Remarks>Pass</Remarks> <BatchNo.>1</BatchNo.> <SpecimenID>CL1</SpecimenID> <OperatorName>Anuj</OperatorName> <SpecimenAge>1.00</SpecimenAge> <Grade>M12</Grade> <DateofCasting>01/09/2012</DateofCasting> <SpecimenShape>Cube</SpecimenShape> <SpecimenSize>150.00</SpecimenSize> <Area>22,500</Area> <Weight>10.0</Weight> <Density>1.00</Density> <TestDate>17/09/2012</TestDate> <TestTime>9:49:20 AM</TestTime> <BatchDate>17/09/2012</BatchDate> <UltimateForce>10.9</UltimateForce> <UltimateStress>0.49</UltimateStress> <Remarks>Pass</Remarks> <BatchNo.>1</BatchNo.> <SpecimenID>CL1</SpecimenID> <OperatorName>Anuj</OperatorName> <SpecimenAge>1.00</SpecimenAge> <Grade>M12</Grade> <DateofCasting>01/09/2012</DateofCasting> <SpecimenShape>Cube</SpecimenShape> <SpecimenSize>150.00</SpecimenSize> <Area>22,500</Area> <Weight>10.0</Weight> <Density>1.00</Density> <TestDate>17/09/2012</TestDate> <TestTime>9:49:42 AM</TestTime> <BatchDate>17/09/2012</BatchDate> <UltimateForce>2.6</UltimateForce> <UltimateStress>0.12</UltimateStress> <Remarks>Pass</Remarks> </Horizon-Export>

En realidad, es una salida de prueba con resultados de prueba múltiples en un solo xml. AFAIK el xml tiene un formato incorrecto ya que todas las pruebas están en un solo nivel y no están ramificadas. Para hacer que el XML sea legible, coloco una línea entre los conjuntos de resultados. El resultado de una prueba comienza desde <BatchNo></BatchNo.> Y termina en <Remarks></Remarks> . Tengo una clase para lo mismo. Para un solo conjunto de resultados o resultado ramificado puedo analizar, pero en este caso mi código se analiza solo una vez. Necesito crear una lista de clase de lo mismo.

Código que estoy usando:

var root = XDocument.Load(path).Root; var s = root.Element("BatchNo.").value; // and so on for other nodes.

Tengo una pregunta similar publicada, ya que desconocía el requisito real del cliente. Ahora dijeron que no es una prueba en realidad el resultado de múltiples pruebas, así que estoy publicando una pregunta de nuevo. Amablemente no vota cerca o voto abajo.

No se puede analizar XML utilizando LINQ en ASP.Net y C #


Debería ser fácil de transformar en xml con el que sea más fácil trabajar. Algo así que hace que cada uno de los elementos de datos en el xml sea un <item> y, por lo tanto, el XML analizado sea una lista:

string startStr = "..."; // as above read it or whatever. string validXML = startStr .Replace("<Horizon-Export><BatchNo.>","<Horizon-Export><item><BatchNo.>") .Replace(@"</Remarks><BatchNo.>",@"</Remarks></item><item><BatchNo.>") .Replace(@"</Remarks></Horizon-Export>",@"</Remarks></item></Horizon-Export>");

Es posible que deba ajustar esto dependiendo del formato exacto de la cadena fuente, pero es un algoritmo simple; para el primer elemento de la lista debe prefijar con <item> . Entre cada elemento, agregue </item><item> y luego ponga </item> al final de la lista.

Sé que no tiene nada que ver con esto, pero tengo que señalar que mezclar mayúsculas y minúsculas en etiquetas XML y nombres de atributos se considera una forma realmente mala. Todas las etiquetas xml deben estar en minúsculas.


Prueba esto

class MX { public string BatchNo { get; set; } public string SpecimenID { get; set; } //and so on static public List<MX> Arr = new List<MX>(); } protected void Page_Load(object sender, EventArgs e) { XDocument doc = XDocument.Load(Server.MapPath("~/xml/a.xml")); List<string> ListBatchNo = new List<string>(); foreach (var node in doc.Descendants("BatchNo.")) { ListBatchNo.Add(node.Value); } List<string> ListSpecimenID = new List<string>(); foreach (var node in doc.Descendants("SpecimenID")) { ListSpecimenID.Add(node.Value); } MX.Arr.Clear(); for (int i = 0; i < ListBatchNo.Count; i++) { MX obj = new MX(); obj.BatchNo = ListBatchNo[i]; obj.SpecimenID = ListSpecimenID[i]; MX.Arr.Add(obj); } GridView2.DataSource = MX.Arr; GridView2.DataBind(); }