2013-03-08 3 views
0

У меня есть XML-файл, в котором некоторые суб-деревья помечены с ID-тегиИспользование XPath содержит() получает слишком много результатов

<root> 
    <A> 
    <someid>5</someid> 
    ... 
    </A> 
    <B> 
    <someid>15</someid> 
    ... 
    </B> 
</root> 

Если я пытаюсь найти поддерево этого идентификатора с помощь XPath я, очевидно, попала в неприятности с номерами, как 5 и 15:

//someid[ contains(text(), "5") ] 

Я пытался использовать matches(), но это не поддерживается.

Любые идеи, как решить эту проблему без совпадений?

+1

Вы не хотите содержит («5»), вы хотите = «5»! –

ответ

1
//someid[text()="5"] 

Я не уверен, какой язык вы используете, так что я продемонстрирую в PHP:

$str=<<<XML 
<root> 
    <A> 
    <someid>5</someid> 
    </A> 
    <B> 
    <someid>15</someid> 
    </B> 
</root> 
XML; 
$xml=simplexml_load_string($str); 
foreach($xml->xpath('//someid[text()="5"]') as $node) 
{ 
    echo $node; 
} 

Выходы 5.

Live demo

1

Если вы идентификаторы все номера, вы можете использовать

//someid[number()=5] 

Вы можете также использовать спички() и регулярное выражение

//someid[matches(text(),"^5$")] 
Смежные вопросы