如何从 C# 中的 xml 字符串中获取特定值
Posted
技术标签:
【中文标题】如何从 C# 中的 xml 字符串中获取特定值【英文标题】:How to get specific value from a xml string in c# 【发布时间】:2016-08-23 02:57:40 【问题描述】:我有以下字符串
<SessionInfo>
<SessionID>MSCB2B-UKT3517_f2823910df-5eff81-528aff-11e6f-0d2ed2408332</SessionID>
<Profile>A</Profile>
<Language>ENG</Language>
<Version>1</Version>
</SessionInfo>
现在我想获取 SessionID 的 value。我试过下面的..
var rootElement = XElement.Parse(output);//output means above string and this step has values
但在这里,
var one = rootElement.Elements("SessionInfo");
它不起作用。我该怎么办。
如果像下面这样的xml字符串怎么办。我们可以用它来获取sessionID
<DtsAgencyLoginResponse xmlns="DTS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="DTS file:///R:/xsd/DtsAgencyLoginMessage_01.xsd">
<SessionInfo>
<SessionID>MSCB2B-UKT351ff7_f282391ff0-5e81-524548a-11eff6-0d321121e16a</SessionID>
<Profile>A</Profile>
<Language>ENG</Language>
<Version>1</Version>
</SessionInfo>
<AdvisoryInfo />
</DtsAgencyLoginResponse>
【问题讨论】:
【参考方案1】:rootElement
已经引用了<SessionInfo>
元素。试试这个方法:
var rootElement = XElement.Parse(output);
var sessionId = rootElement.Element("SessionID").Value;
【讨论】:
@bill 我同意 HimBromBeere 的观点。无论如何,关键字是default namespace。第二个 XML 具有默认命名空间xmlns="DTS"
。尝试搜索如何使用 LINQ-to-XML 在命名空间中选择元素...【参考方案2】:
可以通过xpath选择节点,然后获取值:
XmlDocument doc = new XmlDocument();
doc.LoadXml(@"<SessionInfo>
<SessionID>MSCB2B-UKT3517_f2823910df-5eff81-528aff-11e6f-0d2ed2408332</SessionID>
<Profile>A</Profile>
<Language>ENG</Language>
<Version>1</Version>
</SessionInfo>");
string xpath = "SessionInfo/SessionID";
XmlNode node = doc.SelectSingleNode(xpath);
var value = node.InnerText;
【讨论】:
这里完全不需要调用String.Format
【参考方案3】:
试试这个方法:
private string parseResponseByXML(string xml)
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNodeList xnList = xmlDoc.SelectNodes("/SessionInfo");
string node ="";
if (xnList != null && xnList.Count > 0)
foreach (XmlNode xn in xnList)
node= xn["SessionID"].InnerText;
return node;
你的节点:
xmlDoc.SelectNodes("/SessionInfo");
不同的样本
xmlDoc.SelectNodes("/SessionInfo/node/node");
希望对你有帮助。
【讨论】:
【参考方案4】:请不要手动执行此操作。这太可怕了。使用 .NET 内置的东西,使其更简单、更可靠
XML Serialisation
这是正确的做法。您创建类并让它们从 XML 字符串自动序列化。
【讨论】:
XElement
是“.NET-Stuff”,并带有 LinqToXml。这样做完全没问题。
我猜 OP 只对单个值感兴趣,因此他不需要创建类和添加序列化器属性的开销。 har07 的方法很聪明,非常适合这个目的。以上是关于如何从 C# 中的 xml 字符串中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章