2010-08-18 67 views
1

我在我的InfoPath表單中包含了一個XML文件作爲輔助數據源。數據連接名爲Divisions。下面是該文件的結構和內容:來自C的Infopath XML查詢#

<?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

由於提前,

優素福

回答

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,我會嘗試你的解決方案;但是我相當肯定,所以我必須堅持這一點。

+0

不要忘了逃脫撇號在thevalue - 看到http://stackoverflow.com/questions/1341847/special-character-in-xpath-query – marapet 2010-08-18 20:37:49

+0

是的,這就是我在這裏: StrXPathDiv =「/部門/部門[Abbr = \「」+ thevalue +「\」]「;用'\「' ' – Yusuf 2010-08-19 04:38:15

1

你可以使用LINQ到XML? 我能得到這個工作

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

我需要什麼特定的能夠使用Linq到XML嗎? 在你的例子中'XDocument'如何? – Yusuf 2010-08-18 06:08:36

+0

您需要安裝.NET 3.5或更高版本 - 這可能會導致交易中斷。 XDocument是Linq到Xml的XmlDocument版本。 – RogerNoble 2010-08-18 06:40:14

+0

'XDocument'位於命名空間和程序集System.Xml中。Linq' – 2010-08-18 08:17:34