来自C#的Infopath XML查询

时间:2010-08-18 05:14:05

标签: c# xml infopath

我在InfoPath表单中包含了一个XML文件作为辅助数据源。数据连接名为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

提前致谢,

优素福

2 个答案:

答案 0 :(得分:1)

你能使用Linq到Xml吗? 我能够让这个工作

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

答案 1 :(得分:1)

最后我能够找到解决方案,我必须说它比罗杰的解决方案更复杂;你必须对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()方法。

然后使用以下代码获取值:

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

其中XPNavMyDivision是我需要设置值的导航器。

非常感谢你的时间和帮助罗杰;如果我确定每个人都安装了.NET 3.5,我会尝试你的解决方案;但是我很确定相反,所以我不得不坚持这一点。