我需要根据给定的模板从传入的(例如xml)数据中提取信息。模板可以是XML或纯文本(逗号分隔)。对于每种类型的消息,存在一个模板,例如
<SomeMessage>
<Id>$id</Id>
<Position>
<X>$posX</X>
<Y>$posY</Y>
<Z>$posZ</Z>
</Position>
</SomeMessage>例如,传入的数据为:
<SomeMessage>
<Id>1</Id>
<Position>
<X>0.5f</X>
<Y>1.0f</Y>
<Z>0.0f</Z>
</Position>
</SomeMessage>现在我需要提取有关$id、$posX等的信息。
Parser p = new Parser(templateString);
int id = p.Extract("id", incomingString);
float posx = p.Extract("posX", incomingString);我需要一些东西,比如incomingData和模板的区别,然后在适当的位置提取信息。因为存在几个包含不同信息的模板,并且将来可能会扩展,所以我正在寻找一种通用的方法。
在这种情况下,模板也可以是
$id,$posX,$posY,$posZ然后传入的数据将会是
1,0.5f,1.0f,0.0f后一种情况可能更容易解析,但我需要一个能够同时处理(xml模板和非xml)的解决方案。
发布于 2011-11-30 21:01:46
这可能是一个好主意,每次使用一个接口和2个不同的模板。请注意,返回的消息并未完成,但它给了您一个概念。使用静态XElement.Parse,您可以解析格式良好的XML字符串,以便更方便地使用。
public interface IParser
{
Message Parse(String Payload);
}
// Position Class
public class Position
{
public int X { get; private set; }
public int Y { get; private set; }
public int Z { get; private set; }
public Position(int X, int Y, int Z)
{
this.X = X;
this.Y = Y;
this.Z = Z;
}
}
// Message Class
public class Message
{
public String ID { get; private set; }
public Position Position { get; private set; }
public Message(String ID, Position Position)
{
this.ID = ID;
this.Position = Position;
}
}
// Parser Class
public class XMLParser : IParser
{
public Message Parse(string Payload)
{
var result = XElement.Parse(Payload);
return new Message(result.Elements().ElementAt(0).Value, new Position(X,Y,Z);
}
}https://stackoverflow.com/questions/8326050
复制相似问题