我正在使用XML文件作为数据库进行C#的基本练习。该程序必须允许用户搜索,编辑,删除和添加个人注册。
搜索方法正在运行,但现在我想实现查找此人的功能,无论是否使用大写/小写字母。例如,正如我现在所知,如果我搜索“MATHEUS”并且数据库(XML文件)有“matheus”,我的程序似乎找不到那个人。
public static List<Entidades.Pessoa> Listar(string nome, string cpfcnpj)
{
//Variável de retorno
List<Entidades.Pessoa> pessoas = new List<Entidades.Pessoa>();
//Carrega o arquivo xml
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load("Database.xml");
//Representa uma coleção ordenada de nós.
XmlNodeList xmlNodeListPessoa = null;
if ((cpfcnpj != null) && (cpfcnpj != ""))
{
//Cria uma lista somente com a identificação informada pelo cpfcnpj
xmlNodeListPessoa = xmlDocument.SelectNodes(string.Format("Lista/Pessoa[CpfCnpj='{0}']", cpfcnpj));
}
else if ((nome != null) && (nome != ""))
{
//Cria uma lista somente com a identificação informada pelo nome
xmlNodeListPessoa = xmlDocument.SelectNodes(string.Format("Lista/Pessoa[contains(Nome,'{0}')]", nome));
//xmlNodeListPessoa = xmlDocument.SelectNodes(string.Format("Lista/Pessoa[starts-with(Nome,'{0}')]", nome));
}
else
{
//Senao criar uma lista normal
xmlNodeListPessoa = xmlDocument.SelectNodes(string.Format("Lista/Pessoa"));
}
//Carrega
foreach (XmlElement xmlElementPessoa in xmlNodeListPessoa)
{
//incializar a instancia do objeto pessoa
Entidades.Pessoa objPessoa = Entidade(xmlElementPessoa);
// adicionar objeto ba lista
pessoas.Add(objPessoa);
}
//Retorna
return pessoas;
}
答案 0 :(得分:0)
我非常接近重复,所以请在那里看到答案并仔细思考。它与您的问题不完全匹配,因为XPath查询有=
并且您使用contains
,但想法是相同的:在搜索之前将所有内容转换为小写。
尝试更改:
Lista/Pessoa[contains(Nome,'{0}')] <- nome
到
Lista/Pessoa[contains(lower-case(Nome),'{0}')] <- nome.ToLowerCase()
并确保通过nome.ToLowerCase()
而不仅仅是nome
。匹配的双方必须&#34;标准化&#34;!