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

本文关键字:最佳 方法 是什么 获取 xml 文件 使用 | 更新日期: 2023-09-27 18:32:36

我的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的东西。

你想帮我解决这个问题吗?

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

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;
}

这将获得元素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();