我在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
。
提前致谢,
优素福
答案 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,我会尝试你的解决方案;但是我很确定相反,所以我不得不坚持这一点。