Значение дочернего узла файла загрузки XML переопределяет значение родительских узлов

#mysql #xml #database #load-data-infile

#mysql #xml #База данных #load-data-infile

Вопрос:

Я хочу получить значение родительского дочернего узла в XML, но значение дочернего узла переопределяет его, потому что они имеют одно и то же имя

Как мне заставить его выбирать значение родительского узла без переопределения значения дочернего узла?

Я использую LOAD XML LOCAL INFILE

 LOAD XML LOCAL INFILE 'person.xml'
INTO TABLE document
ROWS IDENTIFIED BY '<document>';
 

Это образец XML-данных

 <document>
      <name>John</name>
      <age>19</age>
      <street>
                <name>Johnson Street</name>
      </street>
</document>
 

Вместо тега name в теге document для печати John печатается Johnson Street

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

1. переименуйте второй в fullname и не используйте повторяющиеся имена для разных разделов иерархии

2. Есть ли возможность переименовать его программно, не затрагивая другие? Я думаю, что файл представляет собой большой файл размером почти 40 МБ.

3. посмотрите, можно ли изменить приграмму, которая генерирует xml, иначе, если вы создаете тысячи файлов xml, вам нужно написать простую программу

Ответ №1:

Это должно быть выполнимо с использованием xpath:

 SET @xml = '<document>
      <name>John</name>
      <age>19</age>
      <street>
                <name>Johnson Street</name>
      </street>
</document>
';
SET @i =1;
SELECT @i, ExtractValue(@xml, './/street/name');
 

Вы можете попробовать это здесь.

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

1. Плохой дизайн — это плохой дизайн

2. @nbk Действительно так!