2017-08-03 97 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; 

     }