对不起格式化 - 设备字符串充满了返回和换行符
我有来自设备的这个字符串;
1) Port: 11 Phone: 18005555555 IP: 192.168.0.1\r\n\r
2) Port: 11 Phone: 18005551234 IP: 192.168.0.1\r\n\r
3) Port: 0 Phone: 0 IP: 0.0.0.\r\n\r
4) Port: 0 Phone: 0 IP: 0.0.0.\r\n\r
5) Port: 0 Phone: 0 IP: 0.0.0.\r\n\r\r\n
我有这个XML文件,它有我想比较字符串的有效数据。
<?xml version="1.0" encoding="utf-8"?>
<Data>
<USA>
<Speed2G>
<PhoneNumber1>
<Port>11</Port>
<Phone>18005555555</Phone>
<IP>192.168.0.1</IP>
</PhoneNumber1>
<PhoneNumber2>
<Port>11</Port>
<Phone>18005551234</Phone>
<IP>192.168.0.1</IP>
</PhoneNumber2>
<PhoneNumber3>
<Port>0</Port>
<Phone>0</Phone>
<IP>0.0.0.</IP>
</PhoneNumber3>
<PhoneNumber4>
<Port>0</Port>
<Phone>0</Phone>
<IP>0.0.0.</IP>
</PhoneNumber4>
<PhoneNumber5>
<Port>0</Port>
<Phone>0</Phone>
<IP>0.0.0.</IP>
</PhoneNumber5>
</Speed2G>
</USA>
</Data>
我该如何解决这个问题?我本身没有任何代码,因为我不知道从哪里开始。字符串中的值需要与xml的innertext匹配。
答案 0 :(得分:1)
这里的基本想法是创建一个名为电话号码的类,如下所示:
public partial class PhoneNumber
{
public int Ordinal;
public int Port;
public string Phone;
public string IPaddress;
public override bool Equals(Object obj)
{
if (obj == null)
{
return false;
}
PhoneNumber pn = obj as PhoneNumber;
if ((object)pn == null)
{
return false;
}
return (this.Ordinal == pn.Ordinal) && (this.Port == pn.Port) && (this.Phone == pn.Phone) && (this.IP == pn.IP);
}
}
然后将您的数据反序列化为List<PhoneNumber>
。对于XML,我会将XML数据加载到XDocument
并以这种方式解析,对于文本数据,您可能希望它在某种StreamReader
中。代码可能会像这样......
public List<PhoneNumber> PhoneNumberFromXML(XDocument xd)
{
List<PhoneNumber> lpn = new List<PhoneNumber>();
foreach (XElement el in xd.Root.Descendants("Speed2G").First().Elements())
{
PhoneNumber pn = new PhoneNumber();
//... logic to parse the individual elements into your class
lpn.Add(pn);
}
return lpn;
}
另一种方法,如
public List<PhoneNumber> PhoneNumberFromDevice(Stream deviceText)
{
List<PhoneNumber> lpn = new List<PhoneNumber>;
using (StreamReader sr = new StreamReader)
{
while (sr.Peek() > 0)
{
string line = sr.ReadLine();
PhoneNumber pn = new PhoneNumber();
// parse line into phone number
lpn.Add(pn);
}
}
return lpn;
}
显然,解析逻辑将在这里开展一些工作。您可以考虑将其合并到该类的构造函数中;您也可以尝试使用XmlSerializer
编写一个更直接序列化到/来自XML的类,但这可能比这个用例需要更多的努力。
答案 1 :(得分:0)
从Xml中创建文本和集合中的集合,而不是比较这些集合。
答案 2 :(得分:0)
我会调查使用xpath将XML消息解构为Object属性。