2015-04-28 5 views
1

Я просто не могу это понять. Таким образом, у меня есть следующий XML:XPath: выберите ребенка на основе братьев и сестер, где есть «близнецы»

<config> 
<environment> 
    <loc>eu</loc> 
    <url>something</url> 
</environment> 
<environment> 
    <loc>au</loc> 
    <loc>ap</loc> 
    <url>somethingElse</url> 
</environment> 

Я хочу, чтобы получить <url> элемента на основании данного <loc>.

У меня есть следующий XPath, который работает, если я хочу <url> для ес но не работает для если я хочу его ар.

Works (возвращает 'что-то')

/config/environment[loc="eu"]/url 

не работает (ничего не возвращает, ожидающей 'somethingElse')

/config/environment[loc="ap"]/url 

Я знаю /config/environment[loc[1]="ap"]/url будет работать, но я мог бы любое количество элементов <loc>, поэтому я не хочу, чтобы мой XPath был таким статическим/зависящим от позиции.

Любая помощь придумать, я предполагаю, что это простая настройка, поэтому я могу получить <url> независимо от порядка <loc>.

+2

'/ конфигурации/окружающей среды [LOC = "ар"]/url' должны работали. Как вы запустили xpath? Какая среда? он вернул мне 'somethingElse', по крайней мере [здесь] (http://www.freeformatter.com/xpath-tester.html) – har07

+0

на самом деле вы правы @ har07. Я пытался сделать это в VBA (используя MSXML v4.0), но если я изменю свою ссылку на MSXML v6.0, то мой оригинальный XPath действительно работает. Возможно, другая версия XPath? – markblandford

+2

Я действительно подозреваю, что вам просто нужно сделать: 'dom.setProperty" SelectionLanguage "," XPath "'. Кажется, что xpath не является языком выбора по умолчанию в старшем MSXML. : https://support.microsoft.com/en-us/kb/288913 – har07

ответ

2

Попробуйте это:

/config/environment/loc[text() = 'eu']/following-sibling::url 

или это:

/config/environment/loc[text() = 'eu']/following-sibling::url[1] 
+2

'' is child of '' not sibling – har07

+0

Thx @ har07 забыл добавить loc –

+0

Вот и все, спасибо! – markblandford