Infopath XML-запрос из C # - PullRequest
       0

Infopath XML-запрос из C #

1 голос
/ 18 августа 2010

Я включил файл XML в форму InfoPath в качестве вторичного источника данных. Передача данных называется Divisions. Ниже приведена структура и содержание файла:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Divisions>
    <Division>
        <Name>Business Application Services</Name>
        <Abbr>BAS</Abbr>
    </Division>
    <Division>
        <Name>Network Security Services</Name>
        <Abbr>NSS</Abbr>
    </Division>
    <Division>
        <Name>Back Office</Name>
        <Abbr>BO</Abbr>
    </Division>
</Divisions>

Что мне нужно сделать, это запросить этот файл, используя Abbr деления, чтобы получить Name.

Я использовал следующий код для создания XPathNodeIterator:

XPathNodeIterator XPNIDivisions = this.DataSources["Divisions"].CreateNavigator().Select("/Divisions/Division/Name");

Итак, как мне найти название подразделения, для которого Abbr равно 'NSS'? Или код, который я использую неправильно (я новичок в манипулировании XML)?

Обратите внимание, что эти сокращения и названия могут измениться (можно добавить больше или удалить некоторые); поэтому мне нужно, чтобы он был динамическим, а это означает, что если у меня есть Abbr в переменной MyAbbr, я должен искать ее Name.

Заранее спасибо,

Yusuf

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Наконец-то мне удалось найти решение, и я должен сказать, что оно немного сложнее, чем решение Роджера;Вы должны знать немного о XPath выражениях.

Так что мне нужно было просто изменить выбор с

XPathNodeIterator XPNIDivisions = this.DataSources["Divisions"].CreateNavigator().Select("/Divisions/Division/Name");

на

XPathNodeIterator XPNIDivisions = this.DataSources["Divisions"].CreateNavigator().Select("/Divisions/Division[Abbr=\"thevalue\"]");

где thevalue - это, конечно, значение, которое вы ищете.

Фактически я определил строковую переменную

StrXPathDiv = "/Divisions/Division[Abbr=\"" + thevalue + "\"]";

и затем передал ееSelect() method.

Затем используйте следующий код для получения значения:

if (XPNIDivisions.MoveNext()) //If any record found
{
    XPNIDivisions.Current.MoveToChild(XPathNodeType.Element);
    XPNavMyDivision.SetValue(XPNIDivisions.Current.Value);
}
else { XPNavMyDivision.SetValue(""); }

, где XPNavMyDivision - это навигатор, где мне нужно установить значение.1025 * Большое спасибо за ваше время и помощь Роджеру;Я бы попробовал ваше решение, если бы был уверен, что у всех установлен .NET 3.5;однако я совершенно уверен в обратном, поэтому мне пришлось придерживаться этого.

1 голос
/ 18 августа 2010

Можете ли вы использовать Linq to Xml?Я смог заставить это работать

string name = XDocument.Load("XMLFile1.xml")
            .Descendants("Division")
            .Where(x => x.Element("Abbr").Value == "NSS")
            .First()
            .Element("Name")
            .Value;
...