【问题标题】:How to fetch node value from xml string in C#?如何从 C# 中的 xml 字符串中获取节点值?
【发布时间】:2019-06-28 12:09:29
【问题描述】:

对于下面的字符串xml值,我需要获取节点“ReturnStr”的值

<ArrayOfAppExportReturnStruct
 xmlns=\"http://schemas.datacontract.org/2004/07/ClientWebService\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n 
 <AppExportReturnStruct>\r\n    
 <Key1>0</Key1>\r\n    <Key2>0</Key2>\r\n  
 <PeriodDT>2019-02-26T00:00:00</PeriodDT>\r\n   
 <ReturnCode>1</ReturnCode>\r\n    
 <ReturnStr>Failure - No Deal found based on input parameters passed.</ReturnStr>\r\n  
 </AppExportReturnStruct>\r\n
</ArrayOfAppExportReturnStruct>

我使用了以下代码

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlString.Replace("\r\n",""));
string alarmDesc;

string xpath = "ArrayOfAppExportReturnStruct/AppExportReturnStruct";
var nodes = xmlDoc.SelectNodes(xpath);
foreach (XmlNode childrenNode in nodes)
{
    alarmDesc = childrenNode.SelectSingleNode("ReturnStr").InnerText;
}

我在节点 var 中一无所获。 在“alarmDesc”中获取 ReturnStr 节点值的正确方法是什么。

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    XML 文本很可能实际上不包含 \r\n 或任何其他转义字符,这正是 Visual Studio 在调试时选择表示字符串的方式。解析 XML 也不依赖于空格,因此几乎可以肯定不需要在值中替换这些字符串。要选择节点,您需要包含命名空间。我建议你使用XElement 而不是XmlDocument,因为它有一个更友好的界面:

    var xml = XElement.Parse(xmlDocument);
    XNamespace ns = "http://schemas.datacontract.org/2004/07/ClientWebService";
    var alarmDesc = (string) xml.Element(ns + "AppExportReturnStruct").Element(ns + "ReturnStr");
    

    对于多个元素,在foreach 循环中使用.Elements 而不是.Element。如果您只对特定位感兴趣,您甚至可以使用 LINQ:

    var alarmDescriptions = xml
        .Elements(ns + "AppExportReturnStruct")
        .Select(e => (string) e.Element(ns + "ReturnStr"));
    

    【讨论】:

      【解决方案2】:

      如果只有一个循环,您可以简单地执行此操作。

      XmlDocument xmlDoc = new XmlDocument();
      xmlDoc.LoadXml(xmlString.Replace("\r\n",""));
      string alarmDesc = xmlDoc.GetElementsByTagName("ReturnStr").Item(0).InnerText;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多