2010-12-03 24 views
3

私は本当にシンプルなXMLファイルを追加した基本プロジェクトを作成しました。私はプロジェクトソリューションでファイルと私の1つのフォームを見ることができます。私はxmlファイルを読むためにコードを書こうとしているが、私はそれが視覚スタジオdoesntとしてそこにそれをピックアップするように見えるようにアクセスできないように見える場合は意味がある?私はC#XML - 読み込まれたXMLドキュメント

XmlDocument doc = new XmlDocument(); 
doc.Load("My document here") 

おかげ

+0

埋め込みリソースとして作成するか、コピーを常に使用する –

答えて

3

あなたが解決するためのXMLファイルを追加した意味のような何かを行うことができますので、どのように私は、そのファイルで入手できますか?その場合は、xmlファイルのプロパティを編集する必要があります(ソリューションエクスプローラで右クリックしてプロパティを選択)。ビルド時に常にコピーするように設定する必要があります。これはビルド時にxmlファイルをbin/Debug-folderにコピーします。これがプログラムの実行元です。ファイルパスを "../../filename.xml"に変更する必要がない場合は、これも機能します。


XMLファイルは、ソリューションの一部である場合、これはあなたの問題の唯一の解決策である、そしてあなたがそれを実行したときにプログラムがファイルを見つけることができません。絶対パスを使用してはいけません。私はあなたがそれを読んだ後にXMLファイルを解析するとし

using(XmlTextReader reader = new XmlTextReader ("yourfile.xml")) 
{ 

    while (reader.Read()) 
    { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: // The node is an element. 
       Console.Write("<" + reader.Name); 
       Console.WriteLine(">"); 
       break; 
      case XmlNodeType.Text: //Display the text in each element. 
       Console.WriteLine (reader.Value); 
       break; 
      case XmlNodeType. EndElement: //Display the end of the element. 
       Console.Write("</" + reader.Name); 
       Console.WriteLine(">"); 
       break; 
     } 
    } 
} 

+0

はい私はxmlファイルを自分のソリューションに追加しました。私は今、XMLファイル上のプロパティを右クリックし、常に出力ディレクトリにコピーを設定しました。しかし、intellisenseは、それがすべきでない限り、まだファイル名を拾いませんか? – tom

+0

ファイル名を取得することはできませんが、文字列として参照する必要がありますが、パスを指定せずに参照できるようになりました(常に出力実行ファイルと同じパスにあります)。 – BeRecursive

+0

ありがとう大いに、2分で受け入れるでしょう:) – tom

0

は、あなたの線に沿って何かをする必要がありますか?

3

xmlファイルをリソースとしてプロジェクトに追加します(ビルドアクション=埋め込みリソース)。使用:

public static XmlDocument GetEmbeddedXml(Assembly assembly, string fileName) 
    { 
     using (var str = GetEmbeddedFile(assembly, fileName)) 
     { 
      using (var tr = new XmlTextReader(str)) 
      { 
       var xml = new XmlDocument(); 
       xml.Load(tr); 
       return xml; 
      } 
     } 
    } 

    public static Stream GetEmbeddedFile(Assembly assembly, string fileName) 
    { 
     string assemblyName = assembly.GetName().Name; 
     Assembly a = Assembly.Load(assemblyName); 
     Stream str = a.GetManifestResourceStream(assemblyName + "." + fileName); 

     if (str == null) 
      throw new Exception("Could not locate embedded resource '" + fileName + "' in assembly '" + assemblyName + "'"); 
     return str; 

    } 
関連する問題