【问题标题】:read the data from XML Structure using c#使用 c# 从 XML 结构中读取数据
【发布时间】:2023-04-05 17:42:01
【问题描述】:

我将xml文件存储在一个字符串对象中,我将xml结构存储在c#中的局部变量字符串abcd中。

 <structure>
    <a>Test Name</a>
    <e>test address</e>
    <c>
       <c1>yyyy<c1>
       <c2>xxxx</c2>
    </c>
    </structure>

如何使用 c# 读取(解析)此 xml 字符串,并使用 c# 将标记 a、标记 c1、标记 c2 值存储在局部变量中。

我试过了

        XmlDocument xmldoc = new XmlDocument();
        xmldoc.LoadXml(abcd);

        XmlElement element = (XmlElement)xmldoc.GetElementById("a");

但我得到空值。如何从 xml 结构中读取值并使用 c# 存储在局部变量中?

【问题讨论】:

    标签: c# xml c#-4.0 xml-parsing xml-serialization


    【解决方案1】:
    string test = " <structure><a>Test Name</a><e>test address</e><c><c1>yyyy</c1><c2>xxxx</c2></c></structure>";
    
            DataSet dataSet = new DataSet();
    
            dataSet.ReadXml(new StringReader(test));
            DataTable dt11 = new DataTable();
            DataTable dt12 = new DataTable();
            //return single table inside of dataset
            if (dataSet.Tables.Count > 1)
            {
                dt11 = dataSet.Tables[0];
                dt12 = dataSet.Tables[1];
            }
    

    【讨论】:

      【解决方案2】:

      您看过 LINQ to XML 了吗?如果没有,请参阅http://msdn.microsoft.com/en-us/library/bb387098.aspx的参考

      【讨论】:

        【解决方案3】:

        您可以使用 LINQ to XML:

         var xDoc = XDocument.Parse(xml);
        
         var a = xDoc.Descendants("a").First().Value;
         var c1 = xDoc.Descendants("c1").First().Value;
         var c2 = xDoc.Descendants("c2").First().Value;
        

        【讨论】:

        • 来自字符串而非 XML 文件
        • 虽然仍然是一个很好的答案
        【解决方案4】:

        非常接近!改成这样:

        XmlDocument xmldoc = new XmlDocument(); 
        xmldoc.LoadXml(abcd); 
        
        XmlElement element = xmldoc.Root.Element("a").Value;
        

        【讨论】:

          【解决方案5】:

          Linq2Xml 更容易使用。

          var xElem = XElement.Parse(abcd);
          var a = xElem.Element("a").Value;
          var c = xElem.Element("c").Element("c1").Value;
          

          【讨论】:

            【解决方案6】:

            如果我了解您正在尝试访问 xml 文档中的每个不同标签,那么您应该使用 GetElementsByTagName 而不是 GetElementById。这将返回一个 XmlNodeList 对象,其中包含具有该标签名称的所有节点,您可以将 First 作为 NodeList.Item(0).InnerXml;

            【讨论】:

              【解决方案7】:

              要在接受的答案中使用 XDocument 类,您需要添加:

              using System.Xml.Linq;
              

              *从解决方案资源管理器中,找到“参考”
              *右键单击“添加参考”
              *为 XML 搜索程序集 (Ctrl E)
              *选择 xml.ling 项目
              *单击左侧出现的复选框
              *选择好的

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-09-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多