2013-10-31 64 views
0

我的任務似乎聽起來很簡單,但證明非常困難。我有一個XML文件,如下所示:C#解析/保存XML文檔

<?xml version="1.0" encoding="UTF-8"?> 
<ref:ReferralDocument xmlns:ref="http://ref.com" xmlns:gen="http://ref.com" 
         xmlns:h="http://www.w3.org/1999/xhtml" xmlns:pbr="ref.com" 
         xmlns:xsi="ref.com" schemaVersion="2.9"> 
<ref:MessageDetails> 
    <gen:TestID> 
    <gen:IdValue>2412665651</gen:IdValue> 
    <gen:IdScheme>Test</gen:IdScheme> 
    <gen:IdType>Person</gen:IdType> 
    </gen:TestID> 
</ref:MessageDetails> 
<gen:Name> 
    <gen:StructuredName> 
    <gen:GivenName>Test</gen:GivenName> 
    <gen:FamilyName>Test</gen:FamilyName> 
    </gen:StructuredName> 
    <gen:NameType>Current Name</gen:NameType> 
</gen:Name> 
</ref:MessageDataRef> 

我想讀取XML元素對象中的每個XML元素。將它們存儲在XML元素的列表或數組中。

//Create new document 
var document = new XmlDocument(); 
document.Load("C:\\Users\\liam.mccann\\Documents\\test.xml"); 

加載後在我沒有任何成功獲取每個元素似乎只能得到第一個。

所以簡單加載XML文檔>>驗證XML >>從第一個元素獲取方案版本>>解析爲XML元素列表。

解析後,我希望它很容易重構文件並再次保存。而且文件是一樣的。

希望有人能夠幫助!

回答

1

我想讀取XML元素對象中的每個XML元素。作爲商店 他們在列表或XML元素數組。

你可以做到以下幾點:

var array = document.SelectNodes("/descendant-or-self::*") 
        .OfType<XmlElement>() 
        .ToArray(); 

話雖如此,如果所有你打算是:

解析我希望它會很容易重組文件後 再次保存。

然後將元素存儲在數組中可能不是最佳方法。你可以使用XmlDocument類本身(或更好的 - 新的LINQ方法:System.Xml.Linq.XDocument)。

以下是MSDN文檔,希望能夠幫助您入門:http://msdn.microsoft.com/en-us/library/bb387084%28v=vs.110%29.aspx

+0

我在選擇節點行 – LmC

+0

上得到一個「可能的空值賦值給標記爲非空屬性的實體」這意味着你正在使用Resharper:對你有更多的好感。如上所述,答案只是表明這是可能的,但我仍然不相信這是最好的方法。這裏有一個代碼,如果你有興趣尋求它,可以避免發出警告: 'var xmlNodeList = document.SelectNodes(「/ descendant-or-self :: *」);如果(xmlNodeList!= null) { var array = xmlNodeList.OfType ().ToArray(); }' – decPL

+0

+ 1很好的答案,唯一的事情是!從文件中讀取它之後,就像你建議XML Element Array一樣。 是否有可能保存父母子女結構仍然存在? – LmC