1

可能重复:
XmlReader - 自关闭元素不会触发 EndElement 事件?

我们中的一群人正忙着为 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.... 任何帮助将不胜感激:)

4

2 回答 2

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();
                }
...
于 2012-10-11T18:12:52.157 回答
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;
于 2012-10-11T18:20:42.360 回答