1

我将 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# 存储在局部变量中?

4

7 回答 7

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;
于 2012-10-11T11:42:37.783 回答
3

Linq2Xml 更容易使用。

var xElem = XElement.Parse(abcd);
var a = xElem.Element("a").Value;
var c = xElem.Element("c").Element("c1").Value;
于 2012-10-11T11:45:10.907 回答
0
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];
        }
于 2012-10-11T11:41:06.723 回答
0

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

于 2012-10-11T11:41:44.977 回答
0

很接近!将其更改为:

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

XmlElement element = xmldoc.Root.Element("a").Value;
于 2012-10-11T11:43:52.420 回答
0

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

于 2012-10-11T11:45:13.360 回答
0

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

using System.Xml.Linq;

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

于 2016-10-01T15:14:20.803 回答