我正在读取XML文件,并要求用户输入要搜索的航空公司的名称,方法是将XML保留为大写,条件通过并显示所需的信息,但是将信息保留在小写和小写或大写,不返回任何内容。
public class XMLReader
{
public XMLReader()
{
}
//Fin de metdo leerXML.
public void leerXML()
{
Console.WriteLine("Enter the airline you wish to search: ");
string name;
name = Console.ReadLine().ToUpper();
if (!String.IsNullOrEmpty(name))
{
XElement info = XElement.Load(
@"C:\Users\thoma\Documents\Visual Studio 2019\Backup Files\data.xml");
var airlines = info.XPathSelectElements("aerolinea");
foreach (XElement el in airlines)
{
if (!String.IsNullOrEmpty(el.Element("nombre").Value) &&
((string)el.Element("nombre").Value).IndexOf(name) >= 0)
{
Console.WriteLine((string)el.Element("origen").Value);
Console.WriteLine((string)el.Element("destino").Value);
Console.WriteLine((string)el.Element("fecha").Value);
}
}
}
}
static void Main(string[] args)
{
XMLReader xmlReader = new XMLReader();
xmlReader.leerXML();
Console.ReadLine();
}
}
这是XML
<?xml version="1.0" encoding="iso-8859-1"?>
<aerolineas>
<aerolinea id="01">
<nombre>VIVA COLOMBIA</nombre>
<origen>BOG</origen>
<destino>MDE</destino>
<fecha>01/03/2019</fecha>
</aerolinea>
<aerolinea id="02">
<nombre>HK Express</nombre>
<origen>BOG</origen>
<destino>CTG</destino>
<fecha>01/06/2019</fecha>
</aerolinea>
<aerolinea id="03">
<nombre>Volotea</nombre>
<origen>PEI</origen>
<destino>BOG</destino>
<fecha>01/09/2019</fecha>
</aerolinea>
<aerolinea id="04">
<nombre>Vueling</nombre>
<origen>MDE</origen>
<destino>BOG</destino>
<fecha>01/12/2019</fecha>
</aerolinea>
</aerolineas>
答案 0 :(得分:1)
更改
name = Console.ReadLine().ToUpper();
到
name = Console.ReadLine();
您的原始代码正在读取用户输入,然后将其更改为全部大写,然后再将其存储在“ name”变量中。
现在,要真正解决您的问题,我需要指出两点:
1)您的XML <nombre>
是VIVA COLOMBIA的大写字母,但与Volotea混合使用。其他<nombre>
字段也有类似的问题。
2)您正在处理用户输入,这取决于输入的对象而可能相差很大。某些用户可能会键入所有大写字母,某些用户可能会键入小写字母(您称其为小写)。
真正的解决方法是,您应该将所有内容作为一种情况阅读。因此,这与原始版本相同:name = Console.ReadLine().ToUpper();
更改if (!String.IsNullOrEmpty(el.Element("nombre").Value.) && ((string)el.Element("nombre").Value.IndexOf(name) >= 0)
对此if (!String.IsNullOrEmpty(el.Element("nombre").Value.ToUpper()) && ((string)el.Element("nombre").Value.ToUpper()).IndexOf(name) >= 0)