2013-11-13 2 views
0

Я пытаюсь выбрать значение узла-с XML в виде таблицы в MySQL/MariaDBMySQL EXTRACTVALUE следующий-родственный альтернатива

Acoording к документации MySQL, following-sibling не поддерживается в качестве оси XPath в MySQL. Есть ли альтернатива?

Docs: http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html#function_extractvalue

Моя структура XML выглядит примерно так:

<fields> 
    <record> 
     <id>10</id> 
     <value>Foo</value> 
    </record> 
    <record> 
     <id>20</id> 
     <value>Bar</value> 
    </record> 
</fields> 

мне нужно найти запись с ID 10, и получить текст в <value></value>.

Valid XPath будет /fields/record/id[text()=10]/following-sibling::value/text(), который будет возвращать Foo

Какие есть варианты?

Спасибо!

ответ

3

В этом простом случае вам не нужен following-sibling. Попробуйте вместо этого:

/fields/record[id[text()=10]]/value/text() 

Использование тега id внутри скобок оставляет свой контекст в record так, что следующий слэш спускается к соответствующему родственный id (имеющего такой же родитель, как id).

+0

Всё. Имеет смысл! Прошло много времени с тех пор, как мне пришлось сгибать мышцы XPath, но это имеет общий смысл. Спасибо! На самом деле, для справки для кого-либо еще, последний 'text()' может быть опущен для MySQL Extract Value. Он делает это автоматически, поэтому MySQL будет примерно таким: 'SELECT EXTRACTVALUE (xmlData,"/fields/record [id [текст() = 10]]/value ") в качестве значения' – Danomite

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