【问题标题】:Infopath XML query from C#来自 C# 的 Infopath XML 查询
【发布时间】:2011-03-31 08:44:43
【问题描述】:

我在 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 操作的新手)?

请注意,这些缩写和名称可能会发生变化(可能会添加更多,也可能会删除一些);所以我需要它是动态的,这意味着如果我在变量MyAbbr 中有Abbr,我必须寻找它的Name

提前致谢,

优素福

【问题讨论】:

    标签: c# xml infopath


    【解决方案1】:

    我终于找到了解决方案,我必须说它比 Roger 的解决方案要复杂一些;您必须对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,我会尝试您的解决方案;但是我很确定相反,所以我不得不坚持这一点。

    【讨论】:

    • 不要忘记在值中转义撇号 - 请参阅 stackoverflow.com/questions/1341847/…
    • 是的,这就是我在这里所做的: StrXPathDiv = "/Divisions/Division[Abbr=\"" + thevalue + "\"]";与\"
    【解决方案2】:

    你可以使用 Linq to Xml 吗? 我能够让它工作

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

    【讨论】:

    • 我是否需要任何特定的东西才能使用 Linq to XML?在你的例子中XDocument 怎么样?
    • 您需要拥有 .NET 3.5 或更高版本 - 这样可能会破坏交易。 XDocument 是 Linq to Xml 的 XmlDocument 版本。
    • XDocument 在命名空间和程序集中 System.Xml.Linq
    猜你喜欢
    • 1970-01-01
    • 2011-09-23
    • 2020-09-22
    • 1970-01-01
    • 2021-08-24
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多