gpt4 book ai didi

xml - 找不到匹配项时如何让 XPath 返回占位符默认值?

转载 作者:行者123 更新时间:2023-12-03 17:20:31 28 4
gpt4 key购买 nike

我的 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, 3, "default", "05/25/2001", ]

我该如何做到这一点?当 xPath 不返回匹配项时,如何插入默认值?

我究竟做错了什么?

最佳答案

使用这个 XPath 2.0 表达式 :

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

基于 XSLT 2.0 的验证

这种转变:
<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=
"'[',
string-join((/*/*/finishedSqFt/string(),
/*/*/bedrooms/string(),
(/*/*/bathrooms/string(), 'default')[1],
/*/*/lastSoldDate/string()), ', '),
']'
"/>
</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时:
<results>
<result>
<finishedSqFt>2608</finishedSqFt>
<bedrooms>3</bedrooms>
<totalRooms>9</totalRooms>
<lastSoldDate>05/25/2001</lastSoldDate>
</result>
</results>

计算上面的 XPath 表达式并输出这个计算的结果——想要的、正确的结果 :
[ 2608, 3, default, 05/25/2001 ]

二、 XPath 1.0 解决方案
concat('[ ',
string(/*/*/finishedSqFt), ', ',
string(/*/*/bedrooms), ', ',
substring(string(/*/*/bathrooms), 1 div boolean(string(/*/*/bathrooms)) ),
substring('default', 1 div not(string(/*/*/bathrooms)) ),
', ',
string(/*/*/lastSoldDate),
' ]'
)

基于 XSLT 1.0 的验证 :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:template match="/">
<xsl:value-of select=
"concat('[ ',
string(/*/*/finishedSqFt), ', ',
string(/*/*/bedrooms), ', ',
substring(string(/*/*/bathrooms), 1 div boolean(string(/*/*/bathrooms)) ),
substring('default', 1 div not(string(/*/*/bathrooms)) ),
', ',
string(/*/*/lastSoldDate),
' ]'
)
"/>
</xsl:template>
</xsl:stylesheet>

当应用于相同提供的 XML 文档时,会产生相同的正确结果 :
[ 2608, 3, default, 05/25/2001 ]

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

关于xml - 找不到匹配项时如何让 XPath 返回占位符默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58773319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com