XML/XPath值类型疑问:是否仅为字符串/节点及能否获取嵌套列表
关于XML值与XPath返回类型的疑问解答
1. 忽略XSD定义时,XML值的默认类型
忽略XSD或<xs:element>这类类型定义的情况下,XML中所有文本内容默认都是字符串类型,不会自动解析为数字、布尔值等其他类型。比如你给出的XML示例:
<Values> <String>hi</String> <Number>2</Number> </Values>
这里<Number>标签里的2本质还是字符串,不会被自动识别为数字。对应的XPath表达式Values/String和Values/Number,如果取节点的文本值,返回的都是字符串类型。
2. XPath的返回值类型范围
你总结的类型方向基本准确,XPath的返回类型核心分为节点/节点集和原子值/原子值序列两大类,对应你提到的几种情况:
Values/String:若取节点文本,返回单个字符串"hi";若取节点本身,返回对应元素节点Values:返回<Values>元素节点(非叶子节点,包含子节点)Values/*:取<Values>下所有子元素节点,若取这些节点的文本值,返回字符串数组["hi", "2"];若取节点本身,返回元素节点数组Others/Other:对应下方XML:
该表达式返回两个<Others> <Other><x>2</x></Other> <Other><x>2</x></Other> </Others><Other>元素节点组成的节点数组(node[]),因为<Other>不是叶子节点,包含子节点<x>。
补充说明:XPath也支持数字、布尔值等原子类型,但需要通过显式转换(比如number()函数)才能得到,默认取文本的话均为字符串。
3. XPath能否获取嵌套列表结果?
原生XPath(不借助额外代码处理)无法直接返回类似JSON中[[1,2], [3,4]]的嵌套列表结构。
举对应XML的例子:
<Root> <x> <y>1</y> <y>2</y> </x> <x> <y>3</y> <y>4</y> </x> </Root>
用//x/y会返回所有<y>节点文本值组成的扁平序列["1", "2", "3", "4"];用//x则返回两个<x>节点组成的节点集,每个节点包含自身的<y>子节点,但这并非嵌套的字符串列表。
要得到嵌套列表结构,需在XPath查询后通过额外代码逻辑(比如遍历每个<x>节点,再提取其下<y>的文本值)来构建,原生XPath本身不会直接返回这种嵌套的原子值序列。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

