C# XML 读取器 搜索特定数据包并返回标识符



所以例子我有一个开关盒,我输入"1"然后它会提示用户输入特定的口袋,如果我输入客户端消息数据包内的"ClientLoginRequest",它应该输出一个值为"CLIENTPC_LOGIN_RESPONSE"的字符串,我该怎么做?我的代码只能输出某个节点及其元素,例如它输出程序定义的 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>

所以示例我有一个开关盒,我输入"1"然后它会提示用户输入特定的口袋,如果我输入客户端消息数据包内的"ClientLoginRequest",它应该输出一个字符串,该字符串的值为"CLIENTPC_LOGIN_RESPONSE"我该怎么做?我的代码只能输出某个节点及其元素,例如它输出程序定义的 ConnectionPackets,因此输出为

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

使用 System.Xml.Linq 扩展查询 xml 文档非常简单。如果误解了您的问题,请告诉我。

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>";
}

最新更新