我将以下XML数据存储在SQL表中
<CustomFields xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.kaseya.com/vsa/2007/12/ServiceDeskDefinition.xsd">
<Field fieldName="ChangeRequest">No</Field>
<Field fieldName="ProblemRecord">No</Field>
<Field fieldName="Source">Email</Field>
<Field fieldName="KB_Article">No</Field>
<Field fieldName="OptimusRef">264692</Field>
<Field fieldName="TimeSpentOnTicket">0.25</Field>
<Field fieldName="PONumber" />
<Field fieldName="ResourceAssignedEngineer" />
我想做的是从存储过程中选择“ TimeSpentOnTicket值”。
有什么想法可以做到吗?
这里的问题是您的XML。它是无效的,因此在修复它之前,实际上没有办法搜索它。一种简单的检查方法是使用在线工具,例如W3Schools的工具。我看到的另一个问题是您引用的名称空间(xmlns)不再存在。我认为这也会使Postgres混乱,但是我不是100%。摄取时可能必须将其过滤掉。但是,修复XML之后,在适当的XML函数中使用XPath可以轻松解决问题。
例如,使用下表:
CREATE TABLE BLA.TEMPTABLE (ID INT, MYXML XML)
然后,插入有效版本的XML:
INSERT INTO BLA.TEMPTABLE ( ID, MYXML )
SELECT 1 as ID,
'<?xml version="1.0" encoding="UTF-8"?>
<CustomFields>
<Field fieldName="ChangeRequest">No</Field>
<Field fieldName="ProblemRecord">No</Field>
<Field fieldName="Source">Email</Field>
<Field fieldName="KB_Article">No</Field>
<Field fieldName="OptimusRef">264692</Field>
<Field fieldName="TimeSpentOnTicket">0.25</Field>
<Field fieldName="PONumber" />
<Field fieldName="ResourceAssignedEngineer" />
</CustomFields>' as MYXML
然后,要查询出来,您可以执行以下操作(如果需要,可以使用this这样的工具测试XPath ):
SELECT
tt.ID,
tt.MYXML,
XPATH('/CustomFields//Field[@fieldName=''TimeSpentOnTicket'']/text()', tt.MYXML)
FROM
BLA.TEMPTABLE tt
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句