2013-09-21 3 views
1

я получаю XML из встроенной в машине ниже формат:Синтаксических неразветвленные XML в C#

<?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> 

Это на самом деле проверить вывод, имеющие несколько результата теста в одном XML. AFAIK xml имеет неправильный формат, поскольку все тесты находятся на одном уровне, и они не разветвлены. Для того, чтобы сделать читаемый XML, я помещаю линию между наборами результатов. Результат теста начинается с <BatchNo></BatchNo.> и заканчивается на <Remarks></Remarks>. У меня есть класс для того же. Для одного результата или разветвленного результата я могу разобрать, но в этом случае мой код анализируется только один раз. Мне нужно создать список одного класса.

код я использую:

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

У меня подобный вопрос отвечал, так как я не знал о фактической потребности со стороны клиента. Теперь они сказали, что это не один тест на самом деле результат нескольких тестов, поэтому я снова отправляю вопрос. Пожалуйста, не голосуйте близко или вниз.

Unable to Parse XML using LINQ in ASP.Net & C#

+0

Вы можете более подробно пояснить, что вы подразумеваете под «Для одного результата или разветвленного результата я могу разобрать, но в этом случае мой синтаксический анализ кода один раз. Мне нужно создать список классов того же« –

ответ

1

Попробуйте

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(); 
} 
+0

@Amit Ranjan - мой ответ отредактировал –

+0

вот что я искал. Работал как шарм .. –

0

Должно быть легко преобразовать в XML, который легче работать. Нечто подобное, что делает каждый из элементов данных в XML <item> и, таким образом, разобранный XML список:

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>"); 

Вам может понадобиться настроить это в зависимости от конкретного формата исходной строки, но это простой алгоритм; для первого элемента в списке вам нужно указать префикс <item>. Между каждым пунктом добавьте </item><item>, а затем положите </item> в конце списка.

Я знаю, что вы не имеете ничего общего с этим, но я должен указать, что смешивание верхнего и нижнего регистра в тегах XML и именах атрибутов считается действительно плохой формой. Все теги xml должны быть строчными.

Смежные вопросы