Выберите данные из xml с помощью mysql extractValue()

#mysql #xml

#mysql #xml

Вопрос:

Я хочу извлечь идентификатор местоположения из give xml, а также хочу поставить условие, которое извлекает его, если местоположение существует.

 <?xml version="1.0" encoding="UTF-8"?>
<id>1006221342207</id>
<name>Hitesh Modha</name>
<email>hitesh.99@hotmail.com</email>
<location>
    <id>115440481803904</id>
    <name>Ahmedabad, India</name>
</location>
  

Я пробовал :

 SET location = ExtractValue(xml, '//locations//id');    
SELECT ExtractValue(location, '//id'); 
  

но это не работает.
Пожалуйста, помогите

Комментарии:

1. Вы можете использовать класс SimpleXML, а затем вставить свои данные в базу данных

2. Ваш XML неверен, в нем отсутствует элемент документа.

3. @ThW: это не недопустимо, extractValue ожидает фрагмент XML, а не документ, так что все в порядке.

Ответ №1:

SQL

 SELECT
  ExtractValue('<?xml version="1.0" encoding="UTF-8"?>
<id>1006221342207</id>
<name>Hitesh Modha</name>
<email>hitesh.99@hotmail.com</email>
<location>
    <id>115440481803904</id>
    <name>Ahmedabad, India</name>
</location>', '//location//id');
  

возвращает только пустой результат, потому что путь //locations//id пуст для используемого фрагмента XML.

Скорее всего, вы ищете '/location/id' выражение xpath, поскольку оно вернет значение id text() : 115440481803904

Следующая ошибка, которую вы совершаете, заключается в том, что вы думаете ExtractValue , что вернет фрагмент XML, который вы можете повторно запустить ExtractValue . Это просто не тот случай (только если — что не так в вашем примере — в найденном узле был бы XML, закодированный как CDATA text() ).

Все детали подробно описаны здесь:

Если вы не можете обойти эти заблуждения, я не могу дать вам никаких дополнительных предложений.