如何编写XPath获取含非空值的Constant元素的Name属性列表?
解决XPath筛选非空值Constant元素Name属性的问题
原始XML结构
<Constants> <Constant Name="ExchangeRates"></Constant> <Constant Name="Company">Test</Constant> <Constant Name="TopFrameScreenInputs"></Constant> <Constant Name="TopFrameBTScreenInputs"></Constant> <Constant Name="MidFrame1BTScreenInputs"></Constant> <Constant Name="MidFrame1ScreenInputs"></Constant> <Constant Name="MidFrame2ScreenInputs"></Constant> <Constant Name="MidFrame2BTScreenInputs"></Constant> <Constant Name="SpareScreenInPriceInputs1"></Constant> <Constant Name="SpareScreenInPriceInputs2"></Constant> <Constant Name="SpareScreenInPriceInputs3"></Constant> <Constant Name="SpareScreenOptionInputs1"></Constant> <Constant Name="SpareScreenOptionInputs2"></Constant> <Constant Name="SpareScreenOptionInputs3"></Constant> <Constant Name="ChildFormInputsLoopCounter">1</Constant> <Constant Name="ScreenChildMode">TEST</Constant> </Constants>
需求
筛选出包含非空文本值的Constant元素的Name属性(如Company、ScreenChildMode),跳过无文本值的元素(如ExchangeRates)。
问题分析
你之前尝试的XPath错误在于把筛选条件放在了Constants父节点上,而非直接针对Constant子节点做筛选,导致无法精准定位符合要求的元素。
正确的XPath语句
基础版本(匹配无空白的非空文本)
//Constants/Constant[text() != '']/@Name
如果XML中空元素可能包含换行、空格等空白字符,建议用normalize-space()处理,避免误判:
//Constants/Constant[normalize-space(text()) != '']/@Name
说明
//Constants/Constant:定位所有Constants下的Constant子元素[text() != '']:筛选出文本节点不为空的Constant元素@Name:提取符合条件元素的Name属性
若你的XML完整结构包含根节点Specification,则路径调整为:
/Specification/Constants/Constant[text() != '']/@Name
内容的提问来源于stack exchange,提问作者Keynan Pearson
相关产品推荐
相关产品推荐

