XML 使用 SelectNodes 来获取具有空值子节点的节点
Posted
技术标签:
【中文标题】XML 使用 SelectNodes 来获取具有空值子节点的节点【英文标题】:XML use SelectNodes to get nodes that have a subnode with a null value 【发布时间】:2021-10-27 07:01:59 【问题描述】:目前我们得到一个节点列表,其中特定节点具有 0.00、0 或 0,00 值。
hoofddocument.SelectNodes("//Product[./polispremie_1[.='0,00' or .='0' or .='0.00' ]]")
但如果“polispremie_1”节点为空,我们也希望包含 Product 节点。
我希望在当前 xpath 中添加一些内容。
我已尝试添加 ' 或 .= null ' 但这不起作用。
xml 示例:
<Products>
<Product>
<polispremie_1/>
</Product>
<Product>
<polispremie_1>0</polispremie_1>
</Product>
</products>
在此示例中,第一个产品的 polispremie_1 具有空值。 我想通过上述查询获得两者,但我只获得第二个产品。
【问题讨论】:
考虑编辑您的问题并添加包含实际数据的示例 XML,以便其他用户可以很好地了解结构并给您一个实际的答案。 【参考方案1】:一个 VB 示例
Dim testXE As XElement = <Products>
<Product>
<polispremie_1/>
</Product>
<Product>
<polispremie_1>0</polispremie_1>
</Product>
<Product>
<polispremie_1>0.0</polispremie_1>
</Product>
</Products>
Dim ie As IEnumerable(Of XElement)
Dim d As Decimal
ie = From el As XElement In testXE...<polispremie_1>
Where (Decimal.TryParse(el.Value, Globalization.NumberStyles.Any,
Globalization.CultureInfo.InvariantCulture,
d) AndAlso d = 0) OrElse el.Value = ""
Select el
'look at results in ie
【讨论】:
【参考方案2】:总是很难说出人们认为 XML 中的 null
是什么,但 //Product[not(polispremie_1) or polispremie_1[.='0,00' or .='0' or .='0.00' ]]
会选择没有 polispremie_1
子元素的 Product
元素以及您的值比较条件成立的元素。
【讨论】:
以上是关于XML 使用 SelectNodes 来获取具有空值子节点的节点的主要内容,如果未能解决你的问题,请参考以下文章
当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?