使用c#从XML结构中读取数据

时间:2012-10-11 11:35:36

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

我将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#将标记c1,tag c2值标记为本地变量。

我试过

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

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

但我得到null value.how从xml结构中读取值并使用c#存储在局部变量中?

7 个答案:

答案 0 :(得分:2)

您可以使用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;

答案 1 :(得分:2)

Linq2Xml更容易使用。

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

答案 2 :(得分: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];
        }

答案 3 :(得分:0)

你有没看过LINQ to XML呢?如果没有,请参阅http://msdn.microsoft.com/en-us/library/bb387098.aspx

上的参考

答案 4 :(得分:0)

非常接近!将其更改为:

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

XmlElement element = xmldoc.Root.Element("a").Value;

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

# First assign your "id"s to an R object.
# Here's a hypothetical example:
id <- c("a","b","b","c","c","c","d","d","d","d")

#To return ALL MINUS ONE duplicated values:
id[duplicated(id)]
## [1] "b" "c" "c" "d" "d" "d"

#To return ALL duplicated values by specifying fromLast argument:
id[duplicated(id) | duplicated(id, fromLast=TRUE)]
## [1] "b" "b" "c" "c" "c" "d" "d" "d" "d"

#Yet another way to return ALL duplicated values, using %in% operator:
id[ id %in% id[duplicated(id)] ]
## [1] "b" "b" "c" "c" "c" "d" "d" "d" "d"

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