Uzyskiwanie atrybutu za pomocą XPath

Mając taką strukturę XML:

<?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>

Jak mogę uzyskać wartość lang (Gdzie lang jest eng w tytule książki), dla pierwszego elementu?

 359
Author: Amal Murali, 2010-12-25

8 answers

Jak mogę uzyskać wartość lang (gdzie Lang=eng w tytule książki), dla pierwszy element?

Użycie :

/*/book[1]/title/@lang

Oznacza to :

Wybierz atrybut lang elementu title, który jest potomkiem pierwszego potomka book górnego elementu dokumentu XML.

Aby uzyskać tylko wartość string tego atrybutu użyj standardowej funkcji XPathstring():

string(/*/book[1]/title/@lang)
 499
Author: Dimitre Novatchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-11 14:53:48

Dzięki! To rozwiązało podobny problem, który miałem z atrybutem danych wewnątrz Div.

<div id="prop_sample" data-want="data I want">data I do not want</div>

Użyj tej ścieżki xpath: //*[@id="prop_sample"]/@data-want

Mam nadzieję, że to pomoże komuś innemu!
 52
Author: smulldino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-10 08:45:24

Możesz spróbować poniżej wzorca xPath,

  XPathExpression expr = xPath.compile("/bookstore/book/title[@lang='eng']")
 7
Author: Sharath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-03 09:50:42

Możesz również uzyskać go przez

string(//bookstore/book[1]/title/@lang)    
string(//bookstore/book[2]/title/@lang)

Chociaż jeśli używasz XMLDOM z JavaScript możesz kodować coś w stylu

var n1 = uXmlDoc.selectSingleNode("//bookstore/book[1]/title/@lang");

I n1.text da ci wartość "eng"

 2
Author: Vinod Srivastav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-01 15:13:42

Możesz użyć:

(//@lang)[1]

Oznacza to, że otrzymujesz wszystkie węzły atrybutów o nazwie równej "lang" i otrzymujesz pierwszy.

 2
Author: starcwl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-23 12:59:26

Oto fragment pobierania wartości atrybutu "lang" z XPath i 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());
    }
}
 0
Author: vtd-xml-author,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-21 00:00:13

Jeśli używasz PostgreSQL, jest to właściwy sposób, aby go uzyskać. Jest to tylko założenie, gdzie jak masz Książka Tabela Tytułi cena kolumna z wypełnionymi danymi. Oto zapytanie

SELECT xpath('/bookstore/book/title/@lang', xmlforest(book.title AS title, book.price AS price), ARRAY[ARRAY[]::TEXT[]]) FROM book LIMIT 1;
 0
Author: Royce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-26 01:55:34

Standardowa formuła do wyodrębniania wartości atrybutu za pomocą XPath to

elementXPath/@attributeName

Więc tutaj jest xpath do pobrania wartości lang pierwszego atrybutu -

//title[text()='Harry Potter']/@lang

PS: indeksy nigdy nie są sugerowane do użycia w XPath, ponieważ mogą się zmienić, Jeśli pojawi się jeszcze jeden Tag tytułowy.

 0
Author: SelectorsHub - The XPathTool,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-12 17:04:44