可能重复:
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 .... 任何帮助将不胜感激:)
答案 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;