【发布时间】:2021-06-24 10:57:57
【问题描述】:
我想从 xml 对象中去嵌套对象。这是示例 xml:
<persons>
<person>
<person_name>
<firstName>Jon</firstName>
<lastName>Johnson</lastName>
</person_name>
<person_data>
<number>1</number>
</person_data>
<body_parts>
<body_part>Head</body_part>
<body_part>Leg</body_part>
<body_part>Nose</body_part>
</body_parts>
</person>
<person>
<person_name>
<firstName>Kathy</firstName>
<lastName>Carter</lastName>
</person_name>
<person_data>
<number>2</number>
</person_data>
<body_parts>
<body_part>Head</body_part>
<body_part>Palm</body_part>
<body_part>Eye</body_part>
</body_parts>
</person>
<person>
<person_name>
<firstName>Bob</firstName>
<lastName>Burns</lastName>
</person_name>
<person_data>
<number>3</number>
</person_data>
<body_parts>
<body_part>Leg</body_part>
</body_parts>
</person>
</persons>
这是我当前的代码:
DECLARE @xml XML;
DECLARE @iterator int = 1
SET @xml = '<persons>
<person>
<person_name>
<firstName>Jon</firstName>
<lastName>Johnson</lastName>
</person_name>
<person_data>
<number>1</number>
</person_data>
<body_parts>
<body_part>Head</body_part>
<body_part>Leg</body_part>
<body_part>Nose</body_part>
</body_parts>
</person>
<person>
<person_name>
<firstName>Kathy</firstName>
<lastName>Carter</lastName>
</person_name>
<person_data>
<number>2</number>
</person_data>
<body_parts>
<body_part>Head</body_part>
<body_part>Palm</body_part>
<body_part>Eye</body_part>
</body_parts>
</person>
<person>
<person_name>
<firstName>Bob</firstName>
<lastName>Burns</lastName>
</person_name>
<person_data>
<number>3</number>
</person_data>
<body_parts>
<body_part>Leg</body_part>
</body_parts>
</person>
</persons>';
SELECT p.p.value('(./person_name/firstName/text())[1]','varchar(20)') AS firstName,
p.p.value('(./person_name/lastName/text())[1]','varchar(20)') AS lastName,
p.p.value('(./body_parts/body_part)[1]','varchar(20)') AS X
FROM @XML.nodes('persons/person') p(p)
WHERE p.p.value('(./person_data/number/text())[1]','int') = 2;
结果:
Kathy Carter Head
我怎样才能得到所有的body_parts?
【问题讨论】:
-
对了,可以直接在XQuery中过滤
.nodes('persons/person[person_data[number[text() = "2"]]]') p(p)
标签: sql-server xml