下图是我需要处理的xml格式,我的需求就是获取每个Element下的TextValue的值。
<XTextDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" EditorVersionString="1.1.1111.1">
<XElements>
<Element xsi:type="XTextBody">
<Attributes />
<XElements>
<Element xsi:type="XInputField" StyleIndex="2">
<Expressions />
<Attributes />
<XElements>
<Element xsi:type="XString" StyleIndex="2">
<Text>2019-06-01</Text>
</Element>
</XElements>
<TextValue>2019-06-01</TextValue>
<EventExpressions />
<Name>初发病时间</Name>
<InnerValue>2019-06-01</InnerValue>
<ToolTip>初发病时间</ToolTip>
<BackgroundText>初发病时间</BackgroundText>
</Element>
<Element xsi:type="XInputField" StyleIndex="2">
<Expressions />
<Attributes />
<XElements>
<Element xsi:type="XString" StyleIndex="2">
<Text>2019-06-01</Text>
</Element>
</XElements>
<TextValue>2019-06-01</TextValue>
<EventExpressions />
<Name>初诊时间</Name>
<ValueBinding>
<DataSource>Date</DataSource>
<FormatString>YYYY-MM-DD</FormatString>
</ValueBinding>
<InnerValue>2019-06-01</InnerValue>
<ToolTip>初诊时间</ToolTip>
<BackgroundText>初诊时间</BackgroundText>
</Element>
<Element xsi:type="XInputField">
<Expressions />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>公司职员</Text>
</Element>
</XElements>
<TextValue>公司职员</TextValue>
<EventExpressions />
<ValidateStyle>
<ValueName />
<Required>true</Required>
<CustomMessage />
</ValidateStyle>
<InnerValue>公司职员</InnerValue>
<ToolTip>工作情况</ToolTip>
<BackgroundText>工作情况</BackgroundText>
</Element>
<Element xsi:type="XInputField">
<Expressions />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>本科</Text>
</Element>
</XElements>
<TextValue>本科</TextValue>
<EventExpressions />
<ValidateStyle>
<ValueName />
<Required>true</Required>
<CustomMessage />
</ValidateStyle>
<InnerValue>本科</InnerValue>
<ToolTip>文化程度</ToolTip>
<BackgroundText>文化程度</BackgroundText>
</Element>
<Element xsi:type="XInputField">
<Expressions />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>未婚(恋爱史: 0 次)</Text>
</Element>
</XElements>
<TextValue>未婚(恋爱史: 0 次)</TextValue>
<EventExpressions />
<ValidateStyle>
<ValueName />
<Required>true</Required>
<CustomMessage />
</ValidateStyle>
<InnerValue>未婚(恋爱史: 次)</InnerValue>
<ToolTip>婚恋情况</ToolTip>
<BackgroundText>婚恋情况</BackgroundText>
</Element>
<Element xsi:type="XInputField">
<Expressions />
<Attributes />
<XElements>
<Element xsi:type="XString">
<Text>不详</Text>
</Element>
</XElements>
<TextValue>不详</TextValue>
<EventExpressions />
<Name>家族史情况</Name>
<InnerValue>不详</InnerValue>
<ToolTip>双击选择或者直接输入</ToolTip>
<BackgroundText>家族史情况</BackgroundText>
</Element>
</XElements>
</Element>
</XElements>
</XTextDocument>
用query来定位到你想要的xml节点,就比如我这里,是要找Element下Name节点值为"初发病时间"的,找到后用value函数,找你当前结点下你想要的节点值,比如我这里就是要获取Element下的TextValue节点的值。
--用query来定位到你想要的xml节点,就比如我这里,是要找Element下Name节点值为"初发病时间"的,找到后用value函数,找你当前结点下你想要的节点值,比如我这里就是要获取Element下的TextValue节点的值。
SELECT xml字段名.query('XTextDocument/XElements/Element/XElements/Element[Name="初发病时间"]').value('(/Element/TextValue)[1]', 'nvarchar(20)')
FROM 表
WHERE 筛选条件
执行结果如下:
第一次在数据库中来处理xml,大家如果有更好的获取方式可以评论区交流哦!!!