Quero ler dados XML usando XPath em Java, portanto, para as informações que reuni, não sou capaz de analisar XML de acordo com meus requisitos.
aqui está o que eu quero fazer:
Obter o arquivo XML on-line por meio de seu URL e usar o XPath para analisá-lo. Quero criar dois métodos nele. Um é no qual eu insiro um ID de atributo de nó específico e recebo todos os nós filhos como resultado, e o segundo é suponha que eu só quero obter apenas um valor específico de nó filho
<?xml version="1.0"?>
<howto>
<topic name="Java">
<url>http://www.rgagnonjavahowto.htm</url>
<car>taxi</car>
</topic>
<topic name="PowerBuilder">
<url>http://www.rgagnon/pbhowto.htm</url>
<url>http://www.rgagnon/pbhowtonew.htm</url>
</topic>
<topic name="Javascript">
<url>http://www.rgagnon/jshowto.htm</url>
</topic>
<topic name="VBScript">
<url>http://www.rgagnon/vbshowto.htm</url>
</topic>
</howto>
No exemplo acima, eu quero ler todos os elementos se pesquisar por @name e também uma função na qual eu apenas quero que o URL do @name 'Javascript' retorne apenas um elemento do nó.
Respostas:
Você precisa de algo como:
Em seguida, você chama a
expr.evaluate()
passagem do documento definido nesse código e o tipo de retorno esperado e lança o resultado para o tipo de objeto do resultado.Se você precisar de ajuda com expressões XPath específicas, provavelmente deverá fazer perguntas separadas (a menos que essa tenha sido sua pergunta em primeiro lugar aqui - entendi que sua pergunta era como usar a API em Java).
Editar: (resposta ao comentário): Esta expressão XPath fornecerá o texto do primeiro elemento de URL no PowerBuilder:
Isso o levará ao segundo:
Você entende isso com este código:
Se você não souber quantos URLs estão em um determinado nó, faça algo assim:
E depois faça um loop sobre o NodeList.
fonte
Você pode tentar isso.
Documento XML
Salvar como
employees.xml
.Classe do analisador
A classe possui os seguintes métodos
Código fonte
fonte
get
métodos. Somente a cadeia XPath é alterada e a maior parte do restante do código permanece a mesma. Talvez um único método getValuesForXpath () seja suficiente.Exemplo de introdução:
arquivo xml:
Código Java:
fonte
Aqui está um exemplo de processamento de xpath com vtd-xml ... para processamento XML pesado, é inigualável. aqui está um artigo recente sobre este assunto Processando XML com Java - Um Benchmark de Desempenho
fonte
Se você tem um xml como abaixo
e queria extrair o xml abaixo
O código abaixo ajuda a obter o mesmo
Agora, se você quiser apenas o xml como abaixo
Você precisa alterar o
String xpathStr = "//Envelope//Header";
paraString xpathStr = "//Envelope//Header/*";
fonte
Isso mostra como
DOM
Nodes
comXPath
Nodes
.Vamos chamar o código com a seguinte declaração
No nosso caso, queremos imprimir alguns
creatorNames
de umbook.xml
usando"//book/creators/creator/creatorName"
como xpath para executar umaprintNode
ação em cada Nó que corresponda aoXPath
.Código completo
Impressões
Para
book.xml
fonte
Expandindo a excelente resposta de @bluish e @Yishai, eis como você faz os NodeLists e os atributos do nó suportarem iteradores, ou seja, a
for(Node n: nodelist)
interface.Use-o como:
e
O código:
fonte
Leia o arquivo XML usando XPathFactory
SAXParserFactory
eStAX (JSR-173)
.O uso do XPath get node e seus dados filhos.
Documento XML
Posto para o XPathExpression fornecido:
Veja este link para nossa própria Implementação de
NamespaceContext
fonte