XML 到 xQuery,用“”替换空节点或缺失节点

XML to xQuery, replace empty or missing node with " "

我有解析 XML 响应并将其输出到 csv 文件的 xQuery 代码。我正在解析的 XML 响应有时会丢失节点(如果未使用)。这导致 csv 输出出现问题,因为没有返回分隔单元格的“,”,导致行中有不同数量的 rows.The 下面的代码显示了我目前拥有的内容:

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)), "")

有没有办法检查每个节点,如果它们为空或缺失,只需将其替换为“”或“,”。非常感谢,如果解释不清楚,请见谅。

谢谢。

尝试

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

如果序列中有空值,那么空值就会消失。

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

当您使用例如

形成一个序列时
($b/HolidayEndDate,
                                  $b/HolidayType,
                                  $b/FirstName,                                                 
                                  $b/AllowanceRemainingDays,
                                  $b/HolidayStartDate,
                                  $b/EmployeeId,
                                  $b/AllowanceDays,
                                  $b/LastName,
                                  $b/HolidayDurationDays
                                  )

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