gpt4 book ai didi

xml - 如何使用基本XPath编写“if elsif”条件?

转载 作者:行者123 更新时间:2023-12-03 16:55:36 27 4
gpt4 key购买 nike

我有一个非常基本的XML,想编写一个Xpath查询来获取值。
这是XML:

<?xml version="1.0" encoding="UTF-8"?>
<person>
<address>
<type>STD</type>
<key>1234</key>
</address>
<address>
<type>BA</type>
<key>1234</key>
</address>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>7</num>
</phone>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>8</num>
</phone>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>9</num>
</phone>
</person>


这是我的条件:

If (/person/address[type = "STD"]/addresskey = and /person/address[type = "BA"/addresskey )


那么我应该得到 /person/phone[2]/telephonenum。如果此第二电话号码不存在,则应获取第一个电话号码。

最佳答案

这是我的条件:

If (/person/address[type = "STD"]/addresskey = and /person/address[type = "BA"/addresskey )


那么我应该得到 /person/phone[2]/telephonenum。如果这第二
电话号码不存在,则应该获得第一个电话
数。


我想 addresskey的意思是 key(提供的XML中没有 addresskey元素)。

另外,XML格式不正确,因此我不得不更正。

现在让我们解决陈述的要求:

第一:


我应该得到 /person/phone[2]/telephonenum


转换为此:

/*/phone[2]


然后:


如果这第二
电话号码不存在,则应该获得第一个电话
数。


将上面的表达式修改为此:

/*/phone[not(position() >2)][last()]


最后:


If (/person/address[type = "STD"]/addresskey = and /person/address[type = "BA"/addresskey )



完整的表达式变为:

/*/phone[not(position() >2)][last()]
[/*/address[type = 'STD']/key
=
/*/address[type = 'BA']/key
]


基于XSLT的验证:

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

<xsl:template match="/">
<xsl:copy-of select=
"/*/phone[not(position() >2)][last()]
[/*/address[type = 'STD']/key
=
/*/address[type = 'BA']/key
]
"/>
</xsl:template>
</xsl:stylesheet>


当此转换应用于提供的(和更正的)XML时:

<person>
<address>
<type>STD</type>
<key>1234</key>
</address>
<address>
<type>BA</type>
<key>1234</key>
</address>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>7</telephonenum>
</phone>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>8</telephonenum>
</phone>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>9</telephonenum>
</phone>
</person>


所需节点被选中并输出:

<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>8</telephonenum>
</phone>




二。 XPath 2.0表达式:

for $check in
/*/address[type = 'STD']/key[1]
eq
/*/address[type = 'BA']/key[1],
$p1 in /*[$check]/phone[1],
$p2 in /*[$check]/phone[2]
return
($p2, $p1)[1]

关于xml - 如何使用基本XPath编写“if elsif”条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8921435/

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