2012-02-06 13 views
8

Czy istnieje sposób zastosowania funkcji XPath o nazwie starts-with do nazwy węzła zamiast jego wartości? Chcę zaznaczyć FOObar i FOObaz węzły z poniższego dokumentu XML bez wybierania notFOO węzła:Zapytanie XPath dla nazw węzłów pasujących do określonego wzorca

<?xml version="1.0" encoding="UTF-8" ?> 
<RootNode> 
    <FOObar xmlns="http://sample.example.com"> 
     <value>numOne</value> 
    </FOObar> 
    <FOObaz xmlns="http://sample.example.com"> 
     <value>numTwo</value> 
    </FOObaz> 
    <notFOO xmlns="http://sample.example.com"> 
     <value>numThree</value> 
    </notFOO> 
</RootNode> 

otrzymuję, że możliwe jest użycie starts-with szukać w oparciu o węzły tekstowe, na przykład

//sample:value[starts-with(.,'num')] 

Czy istnieje sposób zapisu następujących słów, które są poprawne pod względem składniowym?

//sample:[starts-with(node(),'FOO')] 

To pytanie pochodzi z SSCCE, ale teraz, że pytanie jest, że wszystko jest po prostu kod bałaganu. Oczywiście nadal jest dostępny w wersji revision history.

Odpowiedz

22

Użyj name() lub local-name() funkcje odnoszą się do węzłów według nazwy:

//*[starts-with(local-name(), 'FOO')] 
+0

Ach, szukałem czegoś podobnego 'local-name()' godzinami. Zaczynałem myśleć, że taka funkcja nie istnieje. FYI dla przyszłych odwiedzających, ta odpowiedź jest kompatybilna z przestrzenią nazw: '// sample: * [starts-with (local-name(), 'FOO')]' – Pops

+2

Specyfikacja W3C dla 'local-name': http: // www .w3.org/TR/xpath/# function-local-name – Pops

Powiązane problemy