2011-01-14 5 views
1

У меня есть простой XML-документ:Выбор конкретного узла с помощью XPATH

<?xml version="1.0" encoding="utf-8" ?> 
<root xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <date>BBB</date> 
    <name>CCC</name> 
</root> 

нужно выбрать значение имени "CCC", по дате значения "BBB" .Это отлично работает для следующего XPATH:

/root[date=BBB]/name

Но до тех пор, пока у меня есть пространство имен, я не могу превышать XPATH. В этом случае я знаю, что можно использовать функцию local-name(). Но если я пишу следующее выражение

/*[local-name() = 'root[date=BBB]']/*/*[local-name() = 'name']

Это не работает.

ответ

1

Замена любой тест QName для *[local-name()='...'] в

/root[date='BBB']/name 

Вы должны использовать:

/*[local-name() = 'root'][*[local-name()='date']='BBB'] 
    /*[local-name() = 'name'] 

Но в этом случае я хотел бы использовать:

/*[*[local-name()='date']='BBB']/*[local-name() = 'name'] 

Немного короче с " любой корневой элемент ».

+0

Спасибо, Алехандро, это работает! – mike

+0

@mike: Добро пожаловать. –

Смежные вопросы