2014-03-05 73 views
1

對於在單一個項目,我需要解析XML結果文件,該文件是這樣的:XML文件到C#對象

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ocrsdk.com/schema/resultDescription-1.0.xsd http://ocrsdk.com/schema/resultDescription-1.0.xsd" xmlns="http://ocrsdk.com/schema/resultDescription-1.0.xsd"> 
    <page index="0"> 
    <text id="print" left="160" top="349" right="339" bottom="384"> 
     <value>Vertraqsnummer:</value> 
     <line left="167" top="366" right="326" bottom="384"> 
     <char left="167" top="366" right="180" bottom="382">V</char> 
     <char left="182" top="370" right="192" bottom="382">e</char> 
     <char left="194" top="370" right="199" bottom="382">r</char> 
     <char left="199" top="367" right="205" bottom="382">t</char> 
     <char left="206" top="370" right="212" bottom="382">r</char> 
     <char left="213" top="370" right="223" bottom="382">a</char> 
     <char left="224" top="370" right="234" bottom="384">q</char> 
     <char left="236" top="371" right="245" bottom="383">s</char> 
     <char left="247" top="371" right="256" bottom="382">n</char> 
     <char left="258" top="371" right="268" bottom="383">u</char> 
     <char left="270" top="370" right="285" bottom="383">m</char> 
     <char left="287" top="370" right="302" bottom="382"> 
      <charRecVariants> 
      <variant charConfidence="22">m</variant> 
      <variant charConfidence="-1">rn</variant> 
      </charRecVariants>m</char> 
     <char left="304" top="370" right="314" bottom="382">e</char> 
     <char left="316" top="370" right="322" bottom="382">r</char> 
     <char left="324" top="370" right="326" bottom="382" suspicious="true">:</char> 
     </line> 
    </text> 
    <text id="handprint" left="387" top="1035" right="635" bottom="1089"> 
     <value>309.05</value> 
     <line left="398" top="1045" right="633" bottom="1089"> 
     <char left="398" top="1052" right="426" bottom="1088">3</char> 
     <char left="423" top="1061" right="455" bottom="1089" suspicious="true">0</char> 
     <char left="482" top="1055" right="505" bottom="1089">9</char> 
     <char left="507" top="1084" right="512" bottom="1087">.</char> 
     <char left="520" top="1058" right="549" bottom="1089">0</char> 
     <char left="546" top="1045" right="633" bottom="1089" suspicious="true">5</char> 
     </line> 
    </text> 
    <checkmark id="checked" left="883" top="427" right="928" bottom="469"> 
     <value>checked</value> 
    </checkmark> 
    <checkmark id="not checked" left="884" top="511" right="928" bottom="554"> 
     <value>unchecked</value> 
    </checkmark> 
    <barcode id="leftBarcode" left="46" top="1048" right="128" bottom="1350"> 
     <value encoding="Base64">QkYxMDExNQ==</value> 
    </barcode> 
    </page> 
</document> 

我只需要的元素,從它,我需要創建許多新對象元素的數量。像這樣:

class result{ 
string first; 
string second; 
} 

結果應該只包含value元素的值。

我什麼都試過,但我似乎無法理解怎麼辦呢...... (說實話這是第一次我處理XML文件...)

如何有任何建議解析XML文件?

+1

可能的重複http://stackoverflow.com/questions/55828/how-does-one-parse-xml-files – ovaltein

+1

重複http://stackoverflow.com/questions/10518372/how-to-deserialize-xml-對象 –

+0

結果是第一和第二個什麼?你的xml中沒有任何名字第一或第二。 –

回答

1

爲您創建一個具有您所需屬性的C#類。請注意,您將需要單獨的類來表示嵌套的元素和屬性。然後你使用XMLSerializer來反序列化你的XML,類似這樣:

public static YourClass FromXmlString(string xmlString) 
{ 
    var reader = new StringReader(xmlString); 
    var serializer = new XmlSerializer(typeof(YourClass)); 
    return (YourClass)serializer.Deserialize(reader); 
} 

你說你只想要一些字段;這是一段時間,因爲我已經這樣做了,但我相信你C#類中缺少的所有屬性都將被忽略。此外,您還可以映射你的XML元素使用的XMLElement屬性名稱不同的C#屬性:

[XmlElement("some-element-name")] 
public string MyProperty { get; set; } 

的屬性,你也可以使用XMLAttribute屬性映射:

[Serializable] 
[XMLElement("page"] 
public sealed class Page 
{ 
    [XmlAttribute("index")] 
    public int Index { get; set; } 
} 

在這裏看到的例子: XML string deserialization into c# object

0

讓我們以最好的方式開始,一次一件。我會告訴你如何創建你的變體類。

public class XVariant 
{ 
    public readonly XElement self; 
    public XVariant(XElement element = null) 
    { 
     self = element ?? new XElement("variant"); 
    } 

    public int CharConfidence 
    { 
     get { return (int)self.Attribute("charConfidence"); } 
     set 
     { 
      XAttribute cc = self.Attribute("charConfidence"); 
      if (cc == null) 
       self.Add(cc = new XAttribute("charConfidence")); 
      cc.Value = value.ToString(); 
     } 
    } 

    public string Value 
    { 
     get { return self.Value; } 
     set { self.Value = value; } 
    } 
} 

現在我們可以讀取所有variant元素搭配:

XElement root = XElement.Load(file); // or .Parse(string) 
List<XVariant> variants = root.Descentants("variant") 
           .Select(x => new XVariant(x)) 
           .ToList(); 
foreach(XVariant variant in variants) 
{ 
    Console.WriteLine(variant.CharConfidence.ToString() + " " + variant.Value); 
} 

正如你可以看到,這是比較簡單的,在一個時間來寫一個類(元),當你打破它像這樣。根據您的目的,我寫了它,以便您可以添加/更改值。