C# 从XML字符串中获取单个值的最简单方法?

C# 从XML字符串中获取单个值的最简单方法?,c#,xml,C#,Xml,我想从一个大的XML字符串中得到一个值。我有一根绳子,上面有这样的东西: <?xml version="1.0" encoding="utf-8" ?> <UserInfo> <User> <First>Alice</First> <Last>Avery</Last> <ID>12345</ID> <Age>

我想从一个大的XML字符串中得到一个值。我有一根绳子,上面有这样的东西:

<?xml version="1.0" encoding="utf-8" ?>
<UserInfo>
    <User>
        <First>Alice</First>
        <Last>Avery</Last>
        <ID>12345</ID>
        <Age>25</Age>
        <OtherThing>
            <with>stuff</with>
            <in>it</in>
        </OtherThing>
    </User>
</UserInfo>

爱丽丝
艾弗里
12345
25
东西
信息技术

只是更大更丑,我只想得到ID值:“12345”。ID上可能有属性,它们可能会有所不同,或者我可能只是用正则表达式搜索字符串。看起来你应该只需要两三行就可以做这样的事情。

我认为最简单的方法是使用:方法

因此,就像在提供的MSDN自身示例中一样,您可以执行以下操作:

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<item><name>wrench</name></item>");

    doc["item"]["name"].InnerText; //WILL RETURN "wrench"
XmlDocument doc=新的XmlDocument();
doc.LoadXml(“扳手”);
单据[“项目”][“名称”]。InnerText//将返回“扳手”
我唯一想请您注意的是,XmlDocument完全在内存中加载,并且基于可能变得无效的字符串的大小。
因此,这取决于您操作的数据的实际大小。

我认为最简单的方法是使用:方法

因此,就像在提供的MSDN自身示例中一样,您可以执行以下操作:

    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<item><name>wrench</name></item>");

    doc["item"]["name"].InnerText; //WILL RETURN "wrench"
XmlDocument doc=新的XmlDocument();
doc.LoadXml(“扳手”);
单据[“项目”][“名称”]。InnerText//将返回“扳手”
我唯一想请您注意的是,XmlDocument完全在内存中加载,并且基于可能变得无效的字符串的大小。 因此,这取决于您操作的数据的实际大小。

尝试以下方法:

var doc = XDocument.Parse(xmlString);
int id = (int)doc.XPathSelectElement("UserInfo/User/ID");
试试这个:

var doc = XDocument.Parse(xmlString);
int id = (int)doc.XPathSelectElement("UserInfo/User/ID");

它将XPath表达式作为参数。这里有一个关于XPath的教程,它本身就是一种语言,功能非常强大。

它将XPath表达式作为参数。这里有一个关于XPath的教程,XPath本身就是一种语言,功能非常强大。

如果
ID
值在xml中只出现一次,那么通过正则表达式运行它可能会更快

<ID.*?>(.*?)</ID>

如果
ID
值在xml中只出现一次,那么通过正则表达式运行它可能会更快

<ID.*?>(.*?)</ID>

您可能需要考虑LINQ到XML。 以下是一个例子:

var document = XDocument.Parse(“<…/>”);
var id = document.XPathSelectElement("/UserInfo/User/ID").Value;
var document=XDocument.Parse(“”);
var id=document.XPathSelectElement(“/UserInfo/User/id”).Value;

问候语,

< p>您可能需要考虑LINQ到XML。 以下是一个例子:

var document = XDocument.Parse(“<…/>”);
var id = document.XPathSelectElement("/UserInfo/User/ID").Value;
var document=XDocument.Parse(“”);
var id=document.XPathSelectElement(“/UserInfo/User/id”).Value;

关于,

您可以使用LINQ转换XML

XDocument doc = XDocument.Parse(XMLstring);
IEnumerable<string> values = from elem in doc.Descendants("User") select elem.Element("ID").Value;
XDocument doc=XDocument.Parse(XMLstring);
IEnumerable values=从文档子体(“用户”)中的元素选择元素(“ID”).Value;

有关更多信息,请参阅。

您可以使用LINQ转换XML

XDocument doc = XDocument.Parse(XMLstring);
IEnumerable<string> values = from elem in doc.Descendants("User") select elem.Element("ID").Value;
XDocument doc=XDocument.Parse(XMLstring);
IEnumerable values=从文档子体(“用户”)中的元素选择元素(“ID”).Value;
有关更多信息,请参阅。

这也适用于:

class Program
{
    static void Main(string[] args)
    {

        XDocument file = XDocument.Load(@"C:\test.xml");
        var query = file.Element("UserInfo").Element("User").Element("ID").Value;
        Console.WriteLine(query);
        Console.ReadKey();


    }
}
这也应该起作用:

class Program
{
    static void Main(string[] args)
    {

        XDocument file = XDocument.Load(@"C:\test.xml");
        var query = file.Element("UserInfo").Element("User").Element("ID").Value;
        Console.WriteLine(query);
        Console.ReadKey();


    }
}

linq to xml应该提供一个简单、直接的解决方案linq to xml的可能副本应该提供一个简单、直接的解决方案@FrédéricHamidi:proided链接的可能副本,与MSDN文档的通常做法一样,还包含一个建议如何进行的示例。顺便说一句,你的链接中的示例并没有演示如何匹配元素,但是你的答案现在显示了,所以一切都很好。(顺便问一下,为什么要将
ToString()
应用于
InnerText
,它已经是一个字符串?@FrédéricHamidi:typo…@FrédéricHamidi:proided链接,与MSDN文档的常见链接一样,还包含了一个建议如何继续的示例。)。顺便说一句,你的链接中的示例并没有演示如何匹配元素,但是你的答案现在显示了,所以一切都很好。(顺便问一下,为什么要将
ToString()
应用于
InnerText
,它已经是一个字符串?@FrédéricHamidi:typo…+1,不知道强制转换的可能性,我一直在值上使用
Convert
。+1,不知道强制转换的可能性,我一直在值上使用
Convert
)。