XML到xQuery,将空节点或缺少的节点替换为“”

时间:2019-03-05 11:48:17

标签: xml xquery informatica

我有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 :(得分:0)

尝试

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

如果序列中包含null,则null就会消失。

('A', 'B', 'C', (), 'E')变为('A', 'B', 'C', 'E')

答案 1 :(得分:0)

当您与例如形成序列时

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

任何不存在的$b/foo都不会产生值。您将需要使用例如string($b/foo)用于所有这些表达式,以为不存在的foo元素输出一个空字符串。