2017-06-09 25 views
-2

私は挑戦することをしていますが、私はXMLノードの名前 "folder"を得るのに苦労しています。私は 'u'で始まるすべてのフォルダを返そうとしています。XMLノード名の取得方法は?

"アンインストール情報"と "ユーザー"に出力したいが、私はまだすべてのXML構造を持っている。

助けがあれば助かります。

class Program 
    { 
     public static IEnumerable<string> FolderNames(string xml, char startingLetter) 
     { 
      List<string> elem = new List<string>(); 
      List<int> list = new List<int>(); 

      XmlDocument xmldoc = new XmlDocument(); 
      xmldoc.LoadXml(xml); 

      XmlNodeList temp = xmldoc.SelectNodes("folder"); 

      elem.Add(temp[0].InnerXml); 
      Console.WriteLine(elem[0]); 

      return elem; 
     } 

     public static void Main(string[] args) 
     { 
      string xml = 
       "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
       "<folder name=\"c\">" + 
       "<folder name=\"program files\">" + 
       "<folder name=\"uninstall information\" />" + 
       "</folder>" + 
       "<folder name=\"users\" />" + 
       "</folder>"; 

      Program.FolderNames(xml, 'u'); 

      //foreach (string name in Program.FolderNames(xml, 'u')) 
       //Console.WriteLine(name); 
     } 
    } 
} 
+1

XMLに関する記事を読むことをお勧めします... "ノード名"は、あなたが探しているとは全く違うものです。基本的なWikipedaの記事は、[編集]によってあなたの投稿を改善するための良いスタートhttps://en.wikipedia.org/wiki/XML#Key_terminologyかもしれません。また、あなたが実際にしようとしている作業の多くは重複している可能性があります。 –

答えて

0

次のコードは、XPath式を使用してXMLから特定の文字で始まるフォルダ名を選択する方法を示しています。このXPathは、次の部分から構成されます。

//folder
/@name選択が
[starts-with(., 'u')]これらの要素の「名前」は必ず指定の文字

で始まる属性を選択した状態である属性(サブフォルダを含む)すべての「フォルダ」のXML要素を選択します
public static IEnumerable<string> FolderNames(string xml, char startingLetter) 
{ 
    List<string> elem = new List<string>(); 

    XmlDocument xmldoc = new XmlDocument(); 
    xmldoc.LoadXml(xml); 

    foreach (XmlAttribute folderName in xmldoc.SelectNodes("//folder/@name[starts-with(., '"+ startingLetter +"')]")) 
    { 
     elem.Add(folderName.Value); 
     Console.WriteLine(folderName.Value); 
    } 

    return elem; 
} 
+0

ありがとう!完璧な答え。 – Ralf

関連する問題