2017-02-02 17 views
0

什麼是解析XML等的最佳方式:最優雅的方式來解析XML數據和處理自定義的數組元素的值在C#

<?xml version=""1.0"" encoding=""utf-8"" ?> 
     <shapeTemplate> 
      <vertex_contours> 
       <vertex_contour> 
        <data>1 2 3 4 5 ... </data> 
       </vertex_contour> 
       ... 
      </vertex_contours> 

     </shapeTemplate> 

我的直覺告訴我,我應該用C#反序列化和使用XmlSerializer例如:

[Serializable] 
[XmlRoot("shapeTemplate")] 
public class ShapeTemplate 
{ 
    [XmlArray("vertex_contours")] 
    [XmlArrayItem("vertex_contour", typeof(VertexContour))] 
    public VertexContour[] VertexContours { get; set; } 
} 

但後來我意識到XmlSerializer的不能只是分析和<數據>轉換成IEnumerable的<INT>

所以我想建議的方法是處理這種情況的。最初我使用XElement.Parse(...),但我希望能有比這更優雅的解決方案。

+0

雖然這是事實,'XmlSerializer'不容序列化/反序列化從/成'的IEnumerable '你可以實現'IXmlSerializable'接口自我和讀/寫數據。有關詳細信息,請參閱https://www.codeproject.com/Articles/43237/How-to-Implement-IXmlSerializable-Correctly。 – HimBromBeere

+0

確實IXmlSerializable做我在找什麼,現在唯一的問題是這種方法比使用Linq到Xml更好還是更差... – zman

+0

獲取數組項目是複雜的,因爲您沒有XML中每個項目的標記。因此你需要自己解析它。你可以爲每件商品添加標籤嗎? – KernelMode

回答

0

使用XML LINQ:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      string values = (string)doc.Descendants("data").FirstOrDefault(); 

     } 
    } 

} 
+0

是的這是我最初做的,但我不喜歡我需要自己實例化和初始化相關的類。我以爲我可以使用XmlSerializer爲我完成大部分工作...... – zman

+0

你沒有指定你需要的標籤。 – jdweng

+1

雖然這段代碼可能會回答這個問題,但提供關於爲什麼和/或代碼如何回答這個問題的附加上下文會提高它的長期價值。 – Amy

相關問題