2017-08-03 102 views
0

XML獲取XML節點的值在C#

<table> 
<row> 
    <field name="ID">22490</field> 
    <field name="post_date">2014-03-24 09:55:50</field> 
    <field name="post_title">Joe Bloggs</field> 
    <field name="post_status">Live</field> 
    <field name="post_modified">2017-07-31 15:33:46</field> 
</row> 
<row> 
    <field name="ID">29078</field> 
    <field name="post_date">2017-08-01 08:19:57</field> 
    <field name="post_title">Mary Poppins</field> 
    <field name="post_status">auto-draft</field> 
    <field name="post_modified">2017-08-01 08:19:57</field> 
</row><table> 

林通過上面的XML試圖循環,我怎麼可以從上面的POST_TITLE領域獲得的價值「李四」?

這是我到目前爲止有:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("C:\\myxmlfile.xml"); 

XmlNodeList nodeList = xmlDoc.GetElementsByTagName("row"); 

foreach (XmlNode node in nodeList) 
{ 
    string post_title = /// how can i get this 
    string post_status = /// how can i get this 
} 

我可以通過節點列表循環然而,我不能讓每個字段中的值。

+2

「只是不能賦值給變量」 - 你是什麼意思?你可以發佈[mcve]嗎? (這顯然不是完整的XML文檔,否則它會有兩個根元素。)我也強烈建議使用LINQ to XML,但這是另一回事。 –

回答

1

您可以檢查是否屬性名稱是你所期待的

foreach (XmlNode node in nodeList) 
{ 
    string temp = XmlNode.SelectSingleNode("field[@name='post_title']").InnerText; 
} 

這將肯定工作。

+0

.InnerText返回一個字符串,因此可以顯式聲明temp。這樣更具可讀性。 –

+0

在我的示例中,node.attributes集合是空的,值在子節點 – Dez79

+0

@ Dez79編輯我的答案。現在就試試。 –

0

您也可以使用xPath。

 XmlNodeList postTitleFields = xmlDoc.SelectNodes("//field[@name='post_title']"); 
     foreach (XmlNode postTitleField in postTitleFields) 
     { 
      string post_title = postTitleField.InnerText; 
     } 
+0

這怎麼可以用來獲得節點內的多個值? – Dez79

+0

@ Dez79但這完全回答你的問題。如果您正在尋找別的東西,請更新問題以反映這一點。 postTitleFields是一個集合,因此它包含post_title的多個值。 –

0

這是我如何解決這個問題:

XmlNodeList orgFields = xmlDoc.SelectNodes("//row"); 



     foreach (XmlNode org in orgFields) 
     { 
      post_title = org.ChildNodes[2].InnerText; 
      post_status = org.ChildNodes[3].InnerText; 

     }