如何使用C#读取XML?

时间:2012-09-04 12:43:52

标签: c# xml

  

可能重复:
  How to read XML node from URL using C#?

我在XML下面,我想用C#

读取这个XML URL
<result>
<Accounts>
<row no="1">
<FL val="ACCOUNTID">012345678</FL>
<FL val="SMOWNERID">012345678</FL>
<FL val="Account Owner">
<![CDATA[ demo name]]>
</FL>
<FL val="Account Name">
<![CDATA[ demo ]]>
</FL>
<FL val="Phone">
<![CDATA[ +12 34 5567 345]]>
</FL>
<FL val="Account Site">
<![CDATA[ demo]]>
</FL>

我使用下面的代码从URL读取XML但是我在控制台

中得到了以下输出
<FL val="Account Name">
<![CDATA[ demo ]]>
</FL>
<FL val="Phone">
</FL>
<FL val="Account Site">
</FL>

我的代码如下:

String xmlURL = "http://localhost/my.xml";
        XmlTextReader xmlReader = new XmlTextReader(xmlURL);
        while (xmlReader.Read())
        {
            switch (xmlReader.NodeType)
            {
                case XmlNodeType.Element: // The node is an element.
                    Console.Write("<" + xmlReader.Name);

                    while (xmlReader.MoveToNextAttribute()) // Read the attributes.
                        Console.Write(" " + xmlReader.Name + "=’" + xmlReader.Value + "’");
                    Console.WriteLine(">");
                    break;
                case XmlNodeType.Text: //Display the text in each element.
                    Console.WriteLine(xmlReader.Value);
                    break;
                case XmlNodeType.EndElement: //Display the end of the element.
                    Console.Write("</" + xmlReader.Name);
                    Console.WriteLine(">");
                    break;
            }
        }
        Console.WriteLine("Press any key to continue…");
        Console.ReadLine(); //Pause

请帮助阅读内部数据

4 个答案:

答案 0 :(得分:1)

XmlReader和子类只是最难的方法。除非你需要避免将整个解析的对象图加载到内存中,否则最好避免使用。

使用XDocumentXPathusing System.Xml.XPath获取extensions)更容易:

var doc = XDocument.Load(path);
var iterator = doc.XPathSelectElements("/result/Accounts/row/FL");
foreach (var flNode in iterator) {
  var text = flNode.Value;
}

答案 1 :(得分:0)

看一下使用XPath而不是像你正在做的原始XML解析。

有关XPath的详细信息,请参阅this链接。

答案 2 :(得分:0)

使用LINQ2XML ..Its COOL

XElement doc=XElement.Load("yourXML");
foreach(XElement x in doc.Descendants("results").Descendants("Accounts").Descendants("row").Elements())
{
x.Name;//Its name
x.Attribute("val").Value;//its val attributes value
x.Value;//its value
}

答案 3 :(得分:0)

尝试创建XMLDocument,然后用文件填充它,最后通过for循环。

string output;

XmlDocument myxml = new XmlDocument(); //create XML document object

myxml.LoadXml("path to your document"); //populate doc with youe doumnet

XmlElement my_xml_element = myxml.DocumentElement; 

XmlAttributeCollection attribute = myElement.Attributes;


foreach (XmlAttributeCollection test_atribute in attribute )
{
   output = test_attribute.Name
}