【问题标题】:Xpath tokenize function inside contains functionXpath tokenize 函数里面包含函数
【发布时间】:2019-04-19 11:50:56
【问题描述】:

我想知道如何在 XPath 查询中使用嵌套字符串函数。例如,我的 XML 如下所示。

<Invoice> <cbc:Note>Fatura Tipi:MM Alınan Mlz.İade</cbc:Note> </Invoice>

我的 C# 代码如下所示。

cbc:Note[contains(text(), 'Fatura Tipi:')]

当我运行此代码时,它返回 "Fatura Tipi:MM Alınan Mlz.İade" 并且部分正常。 之后,我想在 : 分隔符之后获得字符串的第二部分。意思是我想得到“MM Alınan Mlz.İade”作为结果。所以我想我需要使用类似下面的嵌套函数。

cbc:Note[ substring-after(contains(text(), 'Fatura Tipi:'),':')] 

【问题讨论】:

  • 能否请您出示一下代码?

标签: c# xpath substring


【解决方案1】:

我想你想要

substring-after(cbc:Note[contains(., 'Fatura Tipi:')], ':')

(注意,contains(., ...) 通常优于 contains(text(), ...))

【讨论】:

    【解决方案2】:

    我不相信这可能来自 中的纯 。它的存在是为了传递一个谓词,该谓词将确定您想要返回的 XML 结构的哪一部分。本质上,你过滤到你想要的,然后在 表达式之外用 that 做你想做的事。

    所以一个可行的例子是这样的:

    using System;
    using System.Xml;
    
    var xml = new XmlDocument();
    xml.LoadXml("<Invoice> <Note>Fatura Tipi:MM Alınan Mlz.İade<Note> </Invoice>");
    
    XmlText node = xml.SelectSingleNode("//Note[contains(text(), 'Fatura Tipi:']/text())");
    
    Console.WriteLine(node.Value.Split(':')[1]);
    

    【讨论】:

    • 实际上有 2 个 xpath 函数 .substring-before('aa-bb','-') 和 tokenize("1,15,,24,50,", ",") 但我不知道如何组合这些函数中的一个宽度“包含”函数。
    • @ilhan tokenize 在 XPath 2.0 中引入。 MSFT 的实现仍在 1.0 上运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多