Obter o atributo com o XPath
dada uma estrutura XML como esta:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
Como posso obter o valor de lang
(onde lang
está eng
no título do livro), para o primeiro elemento?
8 answers
Como poderia obter o valor de lang (onde lang = eng no título do livro), para o primeiro elemento?
Utilização:
/*/book[1]/title/@lang
Isto significa:
Seleccione o atributo lang
do elemento título que é filho do primeiro book
Filho do elemento superior do documento XML.
Para obter apenas o valor de string deste atributo use a função padrão XPathstring()
:
string(/*/book[1]/title/@lang)
<div id="prop_sample" data-want="data I want">data I do not want</div>
Utilize este xpath: //*[@id="prop_sample"]/@data-want
Pode tentar abaixo do padrão xPath,
XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")
Você também pode obtê-lo por
string(//bookstore/book[1]/title/@lang)
string(//bookstore/book[2]/title/@lang)
Embora se estiver a usar o XMLDOM com o JavaScript possa codificar algo como
var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");
E n1.text
Dar-te-ão o valor "eng"
Pode usar:
(//@lang)[1]
Isto significa que se obtém todos os nós de atributos com nome igual a "lang" e se obtém o primeiro.
Aqui está o excerto de obter o valor dos atributos de "lang" com XPath e VTD-XML.
import com.ximpleware.*;
public class getAttrVal {
public static void main(String s[]) throws VTDException{
VTDGen vg = new VTDGen();
if (!vg.parseFile("input.xml", false)){
return ;
}
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("/bookstore/book/title/@lang");
System.out.println(" lang's value is ===>"+ap.evalXPathToString());
}
}
Se está a usar o PostgreSQL, esta é a forma correcta de O obter. Isto é apenas uma suposição em que, como você tem um livro Tabela Título e Preço coluna com dados povoados. Aqui está a pergunta
SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;
A fórmula-padrão para extrair os valores do atributo que utiliza o XPath é
elementXPath/@attributeName
Então aqui está o xpath para obter o valor lang do Primeiro atributo -
//title[text()='Harry Potter']/@lang
PS: os índices nunca são sugeridos para usar em XPath, pois podem mudar se mais uma etiqueta de título entrar.