使用c#在xml文件中获取值的最佳方法是什么?

时间:2013-09-25 01:37:42

标签: c# xml

我的xml文件如下:

<?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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

这将获得元素colinfo的值id="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();