2013-09-25 107 views
-1

我的XML文件下面瞭解XML文件中的值的最佳方式:什麼是用C#

<?xml version="1.0" encoding="euc-kr"?> 
<root> 
    <params> 
     <param id="ErrorCode" type="STRING">-1</param> 
     <param id="ErrorMsg" type="STRING">FAIL</param> 
    </params> 
    <dataset id="G_HeaderCommon"> 
     <colinfo id="string000" size="128" type="STRING"/> 
     <record> 
      <string000>XXXXXXXXXXXXXXXXX</string000> 
     </record> 
    </dataset> 
    <dataset id="G_HeaderStdmsg"> 
     <colinfo id="std_msg_cntn" size="128" type="STRING"/> 
     <colinfo id="std_msg_code" size="128" type="STRING"/> 
     <record> 
      <std_msg_cntn>System error occured.</std_msg_cntn> --> I have to get this value. 
      <std_msg_code>BL0012</std_msg_code> 
     </record> 
    </dataset> 
</root> 

而且我想要得到的「std_msg_cntn」的值。

XPath或Linq會沒事的。

我不是很擅長xml的東西。

你想幫我解決這個問題嗎?

+2

你嘗試過什麼?這對於XPath或LINQ to XML來說是微不足道的,稍微閱讀MSDN上的文檔將爲您提供幫助。 –

回答

1
string path = @"C:\SomePlace\XMLFile1.xml"; 
XDocument xDoc = XDocument.Load(path); 

var targetDataset = xDoc 
    .Descendants("dataset") 
    .Where(a => a.Attribute("id").Value == "G_HeaderStdmsg"); 

bool datasetHasStdMsgCntn = targetDataset 
    .Elements("colinfo") 
    .Where(a => a.Attribute("id").Value == "std_msg_cntn") 
    .Any(); 

if (datasetHasStdMsgCntn) 
{ 
    var targetElement = targetDataset.Descendants("std_msg_cntn").First(); 
    string stdMsgCntn = targetElement.Value; 
} 
+0

非常感謝。這非常有幫助。 –

0

這將得到元素colinfoid="std_msg_cntn"的值,在這種情況下該節點爲空。

XDocument main = XDocument.Load(@"FilePath"); 

    var result = main.Descendants("root") 
      .Descendants("dataset").Descendants("colinfo") 
      .Where(e => e.Attribute("id").Value == "std_msg_cntn") 
      .Select(e => e.Value).FirstOrDefault();