XML в xQuery, замените пустой или отсутствующий узел на "" - PullRequest
0 голосов
/ 05 марта 2019

У меня есть код xQuery, который анализирует ответ XML и выводит его в файл csv. В ответе XML, который я анализирую, иногда отсутствуют узлы, если они не используются. Это вызывает проблемы в выходных данных csv, так как нет ",", возвращенного для разделения ячеек, в результате чего появляются строки с различным количеством строк. Код ниже показывает, что у меня в данный момент:

concat("HolidayEndDate,HolidayType,FirstName,AllowanceRemainingDays,HolidayStartDate,EmployeeId,AllowanceDays,LastName,HolidayDurationDays
",
string-join(
    for $b in /root/Result
    return 
      concat(escape-html-uri(string-join(($b/HolidayEndDate,
                                      $b/HolidayType,
                                      $b/FirstName,                                                 
                                      $b/AllowanceRemainingDays,
                                      $b/HolidayStartDate,
                                      $b/EmployeeId,
                                      $b/AllowanceDays,
                                      $b/LastName,
                                      $b/HolidayDurationDays
                                      )
                                       /normalize-space(),
                                    ",")
                         ),
             codepoints-to-string(10)), "")

Есть ли способ проверить каждый из узлов, и если они нулевые или отсутствуют, просто замените его на "" или ",". Большое спасибо, прошу прощения, если объяснение не ясно.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Когда вы формируете последовательность, например,

($b/HolidayEndDate,
                                  $b/HolidayType,
                                  $b/FirstName,                                                 
                                  $b/AllowanceRemainingDays,
                                  $b/HolidayStartDate,
                                  $b/EmployeeId,
                                  $b/AllowanceDays,
                                  $b/LastName,
                                  $b/HolidayDurationDays
                                  )

любой $b/foo, который не существует, не даст значения. Вы должны будете использовать, например, string($b/foo) для всех этих выражений для вывода пустой строки для тех foo элементов, которые не существуют.

0 голосов
/ 05 марта 2019

Попробуйте

($b/HolidayType/text(),"")[1]

Если в последовательности есть ноль, то ноль просто исчезает.

('A', 'B', 'C', (), 'E') становится ('A', 'B', 'C', 'E')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...