如何使用 uppercase/lowercase 搜索词在 XML 中搜索?

How to search in XML both with uppercase/lowercase search term?

我正在使用 XML 文件作为数据库进行 C# 基础练习。该程序必须允许用户搜索、编辑、删除和添加一个人的注册。

搜索方法有效,但现在我想实现无论是否使用 uppercase/lowercase 个字母都可以找到此人的功能。例如,像我现在这样,如果我搜索 "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;

    }

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

尝试更改:

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

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

并确保通过 nome.ToLowerCase() 而不仅仅是 nome。匹配的两边必须是"normalized"!