Функция токена Xpath внутри содержит функцию - PullRequest
1 голос
/ 19 апреля 2019

Я хотел бы знать, как использовать вложенные строковые функции в запросе 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" , и часть в порядке.После этого я хочу получить вторую часть строки после: delimiter.Это значит, что я хотел бы получить " MM Alınan Mlz.İade " в качестве результата.Поэтому я думаю, что мне нужно использовать вложенные функции, как показано ниже.

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

Ответы [ 2 ]

2 голосов
/ 19 апреля 2019

Я думаю, что вы хотите

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

(примечание: contains(., ...) обычно предпочтительнее contains(text(), ...))

0 голосов
/ 19 апреля 2019

Я не верю, что это возможно из чистого в . Он существует для передачи предиката, который определит, какую часть XML-структуры вы хотите вернуть. По сути, вы фильтруете то, что хотите, а затем делаете то, что хотите, с , что вне выражения .

Таким образом, рабочий пример будет выглядеть примерно так:

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]);
...