使用C#读取XML(使用速记标记)

时间:2012-10-11 18:04:17

标签: c# xml visual-studio

  

可能重复:
  XmlReader - Self-closing element does not fire a EndElement event?

我们一群人正在忙着为C#做大学投资组合......我们要编写的一个应用程序是天气应用程序......它必须从网站上获取XML编码,然后显示必要的天气信息,例如降水,温度等。

我们在网上找到了多种方法,但无法找到处理速记标签的方法。我们必须使用的网站有以下xml编码:

<symbol var="01d" name="Fair" number="1"/> <precipitation value="0"/> 
<!-- Valid at 2012-10-10T14:00:00 -->
<windDirection name="South" code="S" deg="182.4"/> 
<windSpeed name="Moderate breeze"     mps="5.9"/> 
<temperature value="17" unit="celsius"/>     
<pressure value="1021.3" unit="hPa"/>

即。它通常使用标签的简写方法....

任何人都可以帮助我们使用C#代码来识别标签元素并从中收集属性信息吗?

我们最接近的是:

 XmlTextReader reader = new XmlTextReader("weather.xml");
            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);
                        Console.WriteLine(">");
                        break;

                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine(reader.Value);
                        break;

                    case XmlNodeType.EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }

但这仅适用于带有缩写标签的XML .... 任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

您可以使用(来自msdn)从标签中读取属性:

      while (reader.Read())
            {
...
                if (reader.HasAttributes)
                {
                    Console.WriteLine("Attributes of <" + reader.Name + ">");
                    while (reader.MoveToNextAttribute())
                    {
                        Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
                    }
                    // Move the reader back to the element node.
                    reader.MoveToElement();
                }
...

答案 1 :(得分:1)

您描述的“简写”通常称为XML属性。不要使用XmlReader。这项工作有更好的工具。假设结构更像:

<someRoot>
    <symbol var="01d" name="Fair" number="1"/> <precipitation value="0"/> 
    <!-- Valid at 2012-10-10T14:00:00 -->
    <windDirection name="South" code="S" deg="182.4"/> 
    <windSpeed name="Moderate breeze"     mps="5.9"/> 
    <temperature value="17" unit="celsius"/>     
    <pressure value="1021.3" unit="hPa"/>
</someRoot>

您可以按如下方式轻松解析属性:

XDocument doc = XDocument.Parse(someXmlString);
string someAttrValue = doc.Root.Element("symbol").Attribute("var").Value;