Conceito
XPath é um padrão W3C criado especialmente para navegar e localizar nós em documentos XML, sendo a base principal do XSLT. Todas as expressões dentro de select="" e test="" no XSLT usam XPath.
- Localizar nós por meio de expressões de caminho
- Mais de 100 funções padrão embutidas: manipulação de texto, cálculos numéricos, comparação de datas, processamento de nós, operações lógicas e muito mais
7 tipos de nó
Nó de documento (nó raiz), nó de elemento, nó de atributo, nó de texto, nó de comentário, nó de instrução de processamento, nó de namespace.
Exemplo:
<title lang="eng">Harry Potter</title>
<title>→ Nó de elementolang="eng"→ Nó de atributoHarry Potter→ Nó de texto
Conceito
- Valor atômico (Atomic value): Conteúdo de nó sem filhos nem pais, por exemplo
eng,29.99 - Item: Item = nó ou valor atômico
Relações entre nós XML
Usamos <bookstore><book><title></title></book></bookstore> como exemplo
- Pai(Parent): Cada elemento e atributo possui apenas um nó pai;
booké o pai detitle - Filhos(Children): Um elemento pode ter múltiplos nós filhos;
titleepricesão filhos debook - Irmãos(Sibling): Compartilham o mesmo nó pai; title e price no mesmo nível são irmãos um do outro
- Ancestral(Ancestor): Pai, pai do pai e todos os nós dos níveis superiores; os ancestrais de
titlesão book e bookstore
Expressões de caminho
Selecionar nós XML usando caminhos e passos
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
</bookstore>Code language: HTML, XML (xml)
| Expressão | Significado |
|---|---|
bookstore | Seleciona o elemento bookstore abaixo da raiz |
/bookstore | Caminho absoluto, inicia a correspondência pelo nó raiz |
bookstore/book | Seleciona todos os elementos filhos book dentro de bookstore |
//book | Elementos book em qualquer local do documento (busca global) |
//@lang | Seleciona todos os nós de atributo chamados lang |
Função XPath:position()
<xsl:value-of select="position()" />Code language: HTML, XML (xml)
position() é uma função nativa do XPath, retorna o número de sequência do nó atual dentro do conjunto de nós, a contagem começa em 1.
Exemplo: exibir números de sequência
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
<!--Percorrer todos os alunos class/student -->
<xsl:for-each select="class/student">
<xsl:sort select="age"/> <!--Ordenar por idade em ordem crescente-->
<!--Filtrar alunos com altura >160-->
<xsl:if test="height > 160">
<li>
<xsl:value-of select="position()" />、<!--Exibir número de sequência-->
<xsl:value-of select="name"/>;
<!--Avaliação com múltiplas condições-->
<xsl:choose>
<xsl:when test="height > 200">
<b><xsl:value-of select="age"/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="age"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)
XPath
Previous: Múltiplos ramos