如何使用大写/小写搜索词搜索XML?

时间:2015-01-08 18:56:43

标签: c# xml case-insensitive

我正在使用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;

    }

1 个答案:

答案 0 :(得分:0)

我非常接近重复,所以请在那里看到答案并仔细思考。它与您的问题不完全匹配,因为XPath查询有=并且您使用contains,但想法是相同的:在搜索之前将所有内容转换为小写。

尝试更改:

Lista/Pessoa[contains(Nome,'{0}')]  <- nome

Lista/Pessoa[contains(lower-case(Nome),'{0}')]  <- nome.ToLowerCase()

并确保通过nome.ToLowerCase()而不仅仅是nome。匹配的双方必须&#34;标准化&#34;!