如果找不到匹配项,如何使XPath返回占位符默认值?

我的XML数据的一部分看起来像这样。

<results>
  <result>
    <finishedSqFt>2608</finishedSqFt>
    <bedrooms>3</bedrooms>
    <totalRooms>9</totalRooms>
    <lastsoldDate>05/25/2001</lastsoldDate>
  </result>
</results>

我的目标是使用单个Xpath表达式提取以下元素的字符串值数组:

[ finishedSqFt,bedrooms,bathrooms,lastsoldDate,]

注意 bathrooms 变量未包含在我的数据中。

我正在使用的Xpath表达式如下:

(//results/result/finishedSqFt)[1] | (//results/result/bedrooms)[1] |
(//results/result/bathrooms)[1] | (//results/result/lastsoldDate)[1]

我得到的结果是:

[ 2608,3,"05/25/2001",]

我想要的结果是:

[ 2608,"default",]

我该如何完成?当xPath不返回匹配项时,如何插入默认值?

我在做什么错了?

calvin1 回答:如果找不到匹配项,如何使XPath返回占位符默认值?

使用此XPath 2.0表达式

where

基于XSLT 2.0的验证

此转换:

select *
from (
    select 
        t.*,lead(status) over(partition by id order by modified_at) lead_status
    from person_updates t
) t
where status = 'INFO' and lead_status = 'UPDATE'

应用于提供的XML文档时

'[',string-join((/*/*/finishedSqFt/string(),/*/*/bedrooms/string(),(/*/*/bathrooms/string(),'default')[1],/*/*/lastSoldDate/string()),','),']'

计算上面的XPath表达式并输出该计算结果-所需的正确结果

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

  <xsl:template match="/">
    <xsl:sequence select=
    "'[',']'
    "/>
  </xsl:template>
</xsl:stylesheet>

II。 XPath 1.0解决方案

<results>
  <result>
    <finishedSqFt>2608</finishedSqFt>
    <bedrooms>3</bedrooms>
    <totalRooms>9</totalRooms>
    <lastSoldDate>05/25/2001</lastSoldDate>
  </result>
</results>

基于XSLT 1.0的验证

[ 2608,3,default,05/25/2001 ]

应用于相同的XML文档时,会产生相同的正确结果

concat('[ ',string(/*/*/finishedSqFt),string(/*/*/bedrooms),substring(string(/*/*/bathrooms),1 div boolean(string(/*/*/bathrooms)) ),substring('default',1 div not(string(/*/*/bathrooms)) ),string(/*/*/lastSoldDate),' ]'
        )

有关XPath 1.0解决方案的说明,请参见 this answer

本文链接:https://www.f2er.com/3135274.html

大家都在问