首先請原諒我實在不熟悉C#,
今天碰到個問題想使用C#從XML中解析資料,然後……太弱的我老也搞不定各種細節,
於是自己封了一個類,給自己使吧。
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Xml.Linq;</p><p>namespace GDE_XMLLoader<br />{<br /> //XML解析類<br /> class XMLLoader<br /> {<br /> //構造,傳入XML檔案名稱<br /> public XMLLoader(String Filename)<br /> {<br /> m_XMLFileHandle = XElement.Load(Filename);<br /> }</p><p> //構造,傳入XMLElement<br /> public XMLLoader(XElement Instance)<br /> {<br /> m_XMLFileHandle = Instance;<br /> }</p><p> //獲得一個XML地區的控制代碼<br /> public XMLLoader GetBlock(String BlockName)<br /> {<br /> return new XMLLoader( m_XMLFileHandle.DescendantsAndSelf(BlockName).Single() );<br /> }</p><p> //設定擷取資料區域名及關鍵字<br /> public void SetDataKeyword(String ZoneName,String Keyword)<br /> {<br /> levelList = m_XMLFileHandle.Elements(ZoneName);<br /> m_Keyword = Keyword;<br /> m_Ptr = 0;<br /> }</p><p> //擷取計數<br /> public int GetCount()<br /> {<br /> return levelList.Count();<br /> }</p><p> //取下一個值<br /> public String GetNextValue()<br /> {<br /> String k = levelList.Single(X => X.Attribute("Code").Value == m_Ptr.ToString()).Attribute(m_Keyword).Value;<br /> m_Ptr++;<br /> return k;<br /> }</p><p> IEnumerable<XElement> levelList;<br /> private XElement m_XMLFileHandle;<br /> private String m_Keyword;<br /> private int m_Ptr;<br /> }<br />}
使用方法
XMLLoader test = new XMLLoader("test.xml");<br /> XMLLoader test2 = test.GetBlock("Test2");<br /> test2.SetDataKeyword("Foo", "Value");</p><p> for (int i = 0; i < test2.GetCount(); ++i)<br /> {<br /> MessageBox.Show(test2.GetNextValue());<br /> }
具體的XML檔案格式
<?xml version="1.0" encoding="utf-8" ?><br /><All></p><p> <Test><br /> <Item Code="0" Value="hello world" Value2="test1"><br /> <TestChild></TestChild><br /> </Item></p><p> <Item Code="1" Value="hello world2" Value2="test2"></Item><br /> </Test></p><p> <Test2><br /> <Foo Code="0" Value="Foo1"></Foo><br /> <Foo Code="1" Value="Foo2"></Foo><br /> </Test2></p><p></All>