如何在.NET中解析字符串中的XML?

Bat*_*uta 1 .net c# xml string

你好StackOverflowers,

我在我的一个.NET函数中收到一个字符串.从XML Visualizer查看时的字符串如下所示:

- <root>
- <Table>
  <ID>ABC-123</ID>
  <CAT>Housekeeping</CAT>
  <DATE>21-JUN-2009</DATE>
  <REP_BY>John</REP_BY>
  <LOCATION>Head Office</LOCATION>
</Table>
- <Table>
  <ID>ABC-124</ID>
  <CAT>Environment</CAT>
  <DATE>23-JUN-2009</DATE>
  <REP_BY>Michelle</REP_BY>
  <LOCATION>Block C</LOCATION>
</Table>
- <Table>
  <ID>ABC-125</ID>
  <CAT>Staging</CAT>
  <DATE>21-JUN-2009</DATE>
  <REP_BY>George</REP_BY>
  <LOCATION>Head Office</LOCATION>
</Table>  
- <Table>
  <ID>ABC-123</ID>
  <CAT>Housekeeping</CAT>
  <DATE>21-JUN-2009</DATE>
  <REP_BY>John</REP_BY>
  <LOCATION space="preserve" xmlns="http://www.w3.org/XML/1998/namespace" /> 
</Table>  
</root>  
Run Code Online (Sandbox Code Playgroud)

我需要解析这个字符串,以便我可以将数据写入一个数据表,其列是每个数据的xml标记.

在上面的文本中,我将有一个数据表,它将有5列,名为ID,CAT,DATE,REP_BY和LOCATION,然后将包含4行数据.

在第四个标记中,请注意它没有任何数据,而是标记为space ="preserve".这意味着我放在数据表中的数据对于第四行的LOCATION列是空白的.

我怎样才能做到这一点?示例代码将受到高度赞赏.谢谢.

Fra*_* B. 8

使用XmlReader类.这个类很快,不会占用大量内存,但读取xml可能很困难.

using (StringReader strReader = new StringReader(yourXMLString))
{
    using (XmlReader reader = XmlReader.Create(strReader))
    {
        while (reader.Read())
        {
            if(reader.Name == "Table" && reader.NodeType == reader.NodeType == XmlNodeType.Element)
            {
                using(XmlReader tableReader = reader.ReadSubtree())
                {
                    ReadTableNode(tableReader);
                }
            }
        }
    }
}

private void ReadTableNode(XmlReader reader)
{
    while (reader.Read())
    {
        if(reader.Name == "ID" && reader.NodeType == reader.NodeType == XmlNodeType.Element)
            //do something
        else if(reader.Name == "CAT" && reader.NodeType == reader.NodeType == XmlNodeType.Element)
            //do something

       //and continue....
    }
}
Run Code Online (Sandbox Code Playgroud)

要获取您使用的当前节点的属性:

string value = reader.GetAttribute(name_of_attribute);
Run Code Online (Sandbox Code Playgroud)

要获取元素的内部文本:

string innerText =  reader.ReadString();
Run Code Online (Sandbox Code Playgroud)

使用XmlDocument类.这个类很慢但是操作并且读取xml非常容易,因为整个xml都被加载了.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(yourXMLString);
//do something
Run Code Online (Sandbox Code Playgroud)

使用XDocument类.使用XDocument的优点是可以直接和同时访问元素.该类还使用LINQ的强大功能来查询xml文档.

using(StringReader tr = new StringReader(yourXMLString))
{
    XDocument doc = XDocument.Load(tr);
    //do something
}
Run Code Online (Sandbox Code Playgroud)