C# 从XML字符串中获取单个值的最简单方法?
我想从一个大的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 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
)。