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?
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)
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
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']")
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"
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.
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());
}
}
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;
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.
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