2017-08-16 6 views
0

この例では、スイッチのケースがあり、 "1"を入力すると、特定のポケットを入力するように指示します。クライアントメッセージパケット内に "ClientLoginRequest" 、 "CLIENTPC_LOGIN_RESPONSE"という値を持つ文字列を出力する必要があります。私のコードは出力のみが特定のノードすることができますし、それはので、ここでの要素、例えば、プログラムで定義された出力はC#XMLリーダ特定のパケットを検索して識別子を返します

あるので、それはConnectionPackets出力がコードされているのです...ここ

 using System; 
     using System.Collections.Generic; 
     using System.Linq; 
     using System.Text; 
     using System.Xml; 
     using System.Threading.Tasks; 
     using System.IO; 
     using System.Xml.Linq; 

     namespace Packets 
     { 
      class Program 
      { 
       static void Main(string[] args) 
       { 
        string result = "C:\\Users\\Ivan.Apungan\\Documents\\PacketTypes.xml"; 


        using (var stream = new StringReader(result)) 
        { 
         XDocument xmlfile = XDocument.Load(result); 

         var query = from c in xmlfile.Descendants("ConnectionPackets") select c; 

         foreach (var item in query) 
         { 
          Console.WriteLine(item.ToString()); 
         } 


        } 
        Console.ReadLine(); 
       } 
      } 
     } 

はxmlファイルです。

<? xml version="1.0" encoding="utf-8" ?> 

    <Packets> 

     <ConnectionPackets> 
     <PacketType name = "Handshake" > HANDSHAKE </ PacketType > 
     < PacketType name="HandshakeAcknowledgement">HANDSHAKE_ACKNOWLEDGEMENT</PacketType> 
     </ConnectionPackets> 

     <ClientMessagePackets> 
     <PacketType name = "ClientLoginRequest" > CLIENTPC_LOGIN_REQUEST </ PacketType > 
     < PacketType name="ClientLoginResponse">CLIENTPC_LOGIN_RESPONSE</PacketType> 
     </ClientMessagePackets> 

    </Packets> 

ので、例えば、私はスイッチケース及びI入力「1」私はクライアント・メッセージ・パケットの内部に、それが必要出力Aが「ClientLoginRequest」を入力した場合、それは、特定のポケットの入力をユーザにプロンプ​​トが表示されますを有しています"CLIENTPC_LOGIN_RESPONSE"という値を持つ文字列はどうすればいいですか?私のコードは出力のみ、特定のノードすることができますし、それはプログラムで定義された出力は

<ConnectionPackets> 
    <PacketType name = "Handshake" > HANDSHAKE </ PacketType > 
    < PacketType name="HandshakeAcknowledgement">HANDSHAKE_ACKNOWLEDGEMENT</PacketType> 
    </ConnectionPackets> 

答えて

0

これは、XML文書を照会するSystem.Xml.Linq拡張を使用して非常に簡単ですので、それはConnectionPacketsを出力要素、例です。あなたの質問に誤解があった場合は、私に知らせてください。

class Program 
{ 
    static void Main(string[] args) 
    { 
     string command = string.Empty; 

     while (command != "exit") 
     { 
      XDocument xml = XDocument.Parse(xmlString); 

      Console.WriteLine("Find packet: "); 
      command = Console.ReadLine(); 

      var element = xml 
        .Descendants() 
        .FirstOrDefault(x => x.Attribute("name")?.Value == command); 

      if (element == null) 
      { 
       Console.WriteLine("Not found"); 
      } 
      else 
      { 
       Console.WriteLine(element.Value); 
      } 

      Console.WriteLine(new string('-', 20)); 

     } 
    } 

    static string xmlString = @"<?xml version=""1.0"" encoding=""utf-8"" ?> 
          <Packets> 
           <ConnectionPackets> 
           <PacketType name=""Handshake""> HANDSHAKE </PacketType > 
           <PacketType name=""HandshakeAcknowledgement"">HANDSHAKE_ACKNOWLEDGEMENT</PacketType> 
           </ConnectionPackets> 

           <ClientMessagePackets> 
           <PacketType name=""ClientLoginRequest"" > CLIENTPC_LOGIN_REQUEST </PacketType > 
           <PacketType name=""ClientLoginResponse"">CLIENTPC_LOGIN_RESPONSE</PacketType> 
           </ClientMessagePackets> 

          </Packets>"; 

} 
関連する問題