XPath é uma linguagem para buscar informação em um arquivo XML. O XPath é usado para navegar através dos atributos e elementos.
Primeiro, vamos conhecer um pouco a estrutura de um arquivo XML.
XML:
| <?xml version="1.0" encoding="ISO-8859-1"?>
|
| <sala>
|
| <aluno>
|
| <nome nacionalidade="br">Igor Ferraz</nome>
|
| <idade>19</idade>
|
| <idioma>inglês</idioma>
|
| </aluno>
|
| </sala> |
- sala => document node
- idade => element node
- nacionalidade="br" => attribute node
Parent (Pai)
Cada elemento e atributo possui seu pai, no caso o elemento aluno é pai de nome, idade e idioma.
Children (Filho)
Os element nodes podem ter nenhum ou muitos filhos.
Siblings (Irmãos)
São nós que possuem o mesmo pai.
O XPath utiliza as chamadas "path expressions", expressões de caminho, para selecionar os nós no arquivo XML. As mais usadas são:
| Expressão |
Decrição |
| nome_do_nó |
Seleciona todos os filhos do nó solicitado |
| / |
Seleciona todos desde do nó raiz |
| // |
Seleciona os nós no documento que aceitam a expressão não importando aonde ele esteja |
| . |
Seleciona o nó corrente |
| .. |
Seleciona o pai do nó |
| @ |
Seleciona os atributos |
Exemplos
- sala => Seleciona todos os nós filhos do elemento sala.
- /sala => Seleciona o elemento raiz sala.
- sala/aluno => Seleciona todos elementos aluno que são filhos de sala.
- //aluno => Seleciona todos os aluno, não importa de quem seja filho.
- //@nacionalidade => Seleciona todos os atributos nacionalidade.
Predicados
São usados para buscar um nó especifico ou um nó que possui um determinado valor.
- /sala/aluno[1] => Seleciona o primeiro elemento aluno que é filho de sala.
- /sala/aluno[last()] => Seleciona o último elemento aluno que é filho de sala.
- /sala/aluno[position()<5] => Seleciona os quatros primeiros elementos aluno que é filho de sala.
- //aluno[@nacionalidade='en'] => Seleciona todos os elementos alunos não importa de quem seja filho porém que tenha o atributo nacionalidade = 'en'.
- /sala/aluno[idade>18] => Seleciona todos os elementos alunos que são filho de sala e possuem idade maior que 18 anos.
- /sala/aluno[idade>18]/nome => Seleciona todos os nomes dos alunos que são filho de sala e possuem idade maior que 18 anos.
Além disso, podemos usar wildcards, como é o caso do operador * e também podemos selecionar mais de um "caminho" através do operador |.
- /sala/* => Seleciona todos os filhos do elemento sala.
- //aluno/nome | //aluno/idade => Seleciona todos os nomes e idades de todos elementos aluno.
Lendo um arquivo XML utilizando C#
Primeiro vamos instanciar um objeto do tipo XmlDocument que vai ser o responsável por abrir
o arquivo XML e depois através do método Load, iremos indicar o caminho de um arquivo.
C#:
| XmlDocument xDoc = new XmlDocument();
|
| xDoc.Load("colegio.xml"); |
O métodos SelectNodes aceita uma expressão XPath e retorna uma coleção de nós.
C#:
| XmlNodeList alunos = xDoc.SelectNodes("/sala/aluno"); |
Para exibir o nome de todos os alunos:
C#:
| foreach (XmlNode a in alunos)
|
| {
|
| Console.WriteLine(a.SelectSingleNode("nome").InnerText);
|
| } |