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 来获取具有空值子节点的节点的主要内容,如果未能解决你的问题,请参考以下文章

具有公共值的 XML SelectNodes,迭代

selectnodes和selectSingleNode

当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?

Dom4j中SelectNodes使用方法

xml文件节点读取时,selectNodes总是在根节点下查找的问题

C# XML 如何直接根据属性值 读取 对应的值 怎么写???