xml轉string - c# xml階層




如何讀取和解析C#中的XML文件? (7)

如何讀取和解析C#中的XML文件?


LINQ to XML示例:

// Loading from a file, you can also load from a stream
var xml = XDocument.Load(@"C:\contacts.xml");


// Query the data and write out a subset of contacts
var query = from c in xml.Root.Descendants("contact")
            where (int)c.Attribute("id") < 4
            select c.Element("firstName").Value + " " +
                   c.Element("lastName").Value;


foreach (string name in query)
{
    Console.WriteLine("Contact's Full Name: {0}", name);
}

參考 :MSDN上的LINQ to XML


XmlDocument從字符串或文件讀取XML。

XmlDocument doc = new XmlDocument();
doc.Load("c:\\temp.xml");

要么

doc.LoadXml("<xml>something</xml>");

然後找到它下面的節點即這樣

XmlNode node = doc.DocumentElement.SelectSingleNode("/book/title");

要么

foreach(XmlNode node in doc.DocumentElement.ChildNodes){
   string text = node.InnerText; //or loop through its children as well
}

然後像這樣讀取該節點內的文本

string text = node.InnerText;

或者讀取一個屬性

string attr = node.Attributes["theattributename"]?.InnerText

總是檢查屬性[“something”]上的空值,因為如果該屬性不存在,它將為空。


以下是我為閱讀xml站點地圖而編寫的一個應用程序:

using System;
using System.Collections.Generic;
using System.Windows.Forms; 
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data;
using System.Xml;

namespace SiteMapReader
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please Enter the Location of the file");

            // get the location we want to get the sitemaps from 
            string dirLoc = Console.ReadLine();

            // get all the sitemaps 
            string[] sitemaps = Directory.GetFiles(dirLoc);
            StreamWriter sw = new StreamWriter(Application.StartupPath + @"\locs.txt", true);

            // loop through each file 
            foreach (string sitemap in sitemaps)
            {
                try
                {
                    // new xdoc instance 
                    XmlDocument xDoc = new XmlDocument();

                    //load up the xml from the location 
                    xDoc.Load(sitemap);

                    // cycle through each child noed 
                    foreach (XmlNode node in xDoc.DocumentElement.ChildNodes)
                    {
                        // first node is the url ... have to go to nexted loc node 
                        foreach (XmlNode locNode in node)
                        {
                            // thereare a couple child nodes here so only take data from node named loc 
                            if (locNode.Name == "loc")
                            {
                                // get the content of the loc node 
                                string loc = locNode.InnerText;

                                // write it to the console so you can see its working 
                                Console.WriteLine(loc + Environment.NewLine);

                                // write it to the file 
                                sw.Write(loc + Environment.NewLine);
                            }
                        }
                    }
                }
                catch { }
            }
            Console.WriteLine("All Done :-)"); 
            Console.ReadLine(); 
        }

        static void readSitemap()
        {
        }
    }
}

粘貼箱上的代碼http://pastebin.com/yK7cSNeY



您可以使用DataSet來讀取XML字符串。

var xmlString = File.ReadAllText(FILE_PATH);
var stringReader = new StringReader(xmlString);
var dsSet = new DataSet();
dsSet.ReadXml(stringReader);

為了信息而發布此信息。


有不同的方式,取決於你想得到的地方。 XmlDocument比XDocument輕,但如果您希望極少驗證一個字符串包含XML,則正則表達式可能是您可以做出的最快和最輕的選擇。 例如,我已經使用SpecFlow為我的API實施了Smoke測試,並且我希望測試任何有效XML中的結果之一 - 然後我將使用正則表達式。 但是,如果我需要從這個XML中提取值,那麼我會用XDocument解析它,以便更快速地完成,而且代碼更少。 或者如果我必須使用一個大的XML(有時我使用大約1M行的XML,甚至更多),我會使用XmlDocument; 那麼我甚至可以逐行讀取它。 為什麼? 嘗試在Visual Studio中打開超過800MB的專用字節; 即使在生產中,也不應該有大於2GB的對象。 你可以用twerk,但不應該。 如果您需要解析包含大量行的文檔,那麼這些文檔可能是CSV。

我寫了這個評論,因為我看到很多XDocument的例子。 XDocument不適用於大文檔,或者當您只想驗證內容是否為XML有效時。 如果你想檢查XML本身是否有意義,那麼你需要Schema。

我也低估了建議的答案,因為我認為它需要上面的信息。 想像一下,我需要驗證200M的XML,一小時10次,是否是有效的XML。 XDocument會浪費大量資源。

prasanna venkatesh也聲明你可以嘗試填充字符串到數據集,它也會指示有效的XML。


  public void ReadXmlFile()
    {
        string path = HttpContext.Current.Server.MapPath("~/App_Data"); // Finds the location of App_Data on server.
        XmlTextReader reader = new XmlTextReader(System.IO.Path.Combine(path, "XMLFile7.xml")); //Combines the location of App_Data and the file name
        while (reader.Read())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    break;
                case XmlNodeType.Text:
                    columnNames.Add(reader.Value);
                    break;
                case XmlNodeType.EndElement:
                    break;
            }
        }
    }

您可以避免第一條語句,只需在XmlTextReader的構造函數中指定路徑名稱即可。







xml