2010-08-20 77 views
0

鑑於此XML,我想從<group>節點檢索XmlNodeListXmlNodeList節點,其節點<id>與'Tech'匹配。匹配應該不區分大小寫。又一個.NET XPath謂詞問題

<groups> 
     <group> 
      <id>Tech</id> 
      <members> 
       <member>johndoe</member> 
       <member>janedoe</member> 
       <member>robdoe</member> 
      </members> 
     </group> 
     <group> 
      <id>Support</id> 
      <members> 
       <member>johnfoe</member> 
       <member>janefoe</member> 
       <member>robfoe</member> 
      </members> 
     </group> 
    </groups> 

我試過這個,期待得到「doe成員」,但它似乎沒有返回任何結果。

 // assume groupName='tech' 
    _document.SelectNodes("//groups/group[translate(id,'abcdefghijklmnopqrstuvxyz','ABCDEFGHIJKLMNOPQRSTUVXYZ')='" + groupName.ToUpper() + "']/members/member"); 
+0

見我的答案猜測,你又不是我們展示真正的XML文檔:) – 2010-08-20 04:40:26

+0

請將您的問題的標題更新爲更相關的內容。 – 2011-11-18 00:43:34

回答

0

我懷疑groupName的價值是不是你認爲它是。

我編這個例子中,根據關你的代碼,我得到的結果,你似乎在期待:

var doc = new XmlDocument(); 
doc.LoadXml(
@"<groups> 
    <group> 
     <id>Tech</id> 
     <members> 
      <member>johndoe</member> 
      <member>janedoe</member> 
      <member>robdoe</member> 
     </members> 
    </group> 
    <group> 
     <id>Support</id> 
     <members> 
      <member>johnfoe</member> 
      <member>janefoe</member> 
      <member>robfoe</member> 
     </members> 
    </group> 
</groups>"); 
foreach (XmlElement node in doc.SelectNodes("//groups/group[translate(id,'abcdefghijklmnopqrstuvxyz','ABCDEFGHIJKLMNOPQRSTUVXYZ')='" + "tech".ToUpper() + "']/members/member")) 
    Console.WriteLine(node.InnerText); 

johndoe的
janedoe
robdoe
按任意鍵繼續。 。 。

我其他的猜測(在黑暗中刺,因爲它似乎爲我工作!),是你正在運行到目前的語言問題(使用的翻譯?),或XML文檔你加載是不知何故被破壞的(字節順序標記?)。基本上,你的角色流問題。

0

再次,最有可能您的XML文檔不是您向我們展示的內容。很多時候,看起來正確的XPath表達式不起作用的原因是文檔具有定義的默認名稱空間,並且表達式中使用的名稱不是前綴。

這個C#控制檯應用程序

using System; 
using System.Xml; 

class TestXPath 
{ 
    static void Main(string[] args) 
    { 
     string xmlText = 
@"<groups> 
    <group> 
     <id>Tech</id> 
     <members> 
      <member>johndoe</member> 
      <member>janedoe</member> 
      <member>robdoe</member> 
     </members> 
    </group> 
    <group> 
     <id>Support</id> 
     <members> 
      <member>johnfoe</member> 
      <member>janefoe</member> 
      <member>robfoe</member> 
     </members> 
    </group> 
</groups>"; 

     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(xmlText); 

     string groupName = "tech"; 

     string xpathExpr = 
@"//groups/group 
      [translate(id,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ') 
      ='" 
      + groupName.ToUpper() [email protected]"' 
      ] 
      /members/member"; 

     XmlNodeList selection = doc.SelectNodes(xpathExpr); 

     foreach (XmlNode node in selection) 
     { 
      Console.WriteLine(node.OuterXml); 
     } 

    } 
} 

運行時,產生預期的,正確的結果

<member>johndoe</member> 
<member>janedoe</member> 
<member>robdoe</member>