【问题标题】:How to read the XML using C#? [duplicate]如何使用 C# 读取 XML? [复制]
【发布时间】:2012-09-04 12:43:52
【问题描述】:

可能重复:
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

请帮忙看里面的资料

【问题讨论】:

  • 有什么理由要使用低级 XML API 而不是(更简单的)LINQ to XML?
  • 如果你使用 .NET 3.5+,你可以使用LINQ to XML (XDocument),我认为这更容易。

标签: c# xml


【解决方案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;
}

【讨论】:

  • 唯一的问题是xml似乎包含许多帐户,并且一个帐户中有许多行。展平所有数据不是一个好主意。
  • @L.B Q 中的歧义太多,无法改进。获取所有文本似乎很奇怪,但这就是最后一句话的含义。
【解决方案2】:

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

有关 XPath 的更多信息,请参阅 this 链接。

【讨论】:

    【解决方案3】:

    尝试创建 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
    }
    

    【讨论】:

      【解决方案4】:

      使用 LINQ2XML..它的 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多