首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage .NET LLRP库

如何使用Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage .NET LLRP库
EN

Stack Overflow用户
提问于 2017-08-22 11:56:22
回答 1查看 765关注 0票数 2

我正在开发一个使用LLRP库的应用程序。在网关(计算机)收到来自阅读器(使用本地主机模拟的阅读器)的消息后,我想使用以下命令将其转换为LLRPMessage

代码语言:javascript
复制
Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage(_xmlReceived, out msg, out enumType);

但是,我在手表(VS2013旗舰版)中检查了一下: msg为空,enumType为0。

我可以听听你对此的建议吗?

我的代码是:

代码语言:javascript
复制
public static void ConvertXmlToLLRPMessage()
{
    Org.LLRP.LTK.LLRPV1.DataType.Message msg;  //Only Message type is accepted.
    Org.LLRP.LTK.LLRPV1.ENUM_LLRP_MSG_TYPE enumType; //Only ENUM_LLRP_MSG_TYPE type is accepted.

    Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage(_xmlReceived, out msg, out enumType);

    Console.WriteLine();
    Console.WriteLine("Print out _xmlReceived, inside ConvertXmlToLLRPMessage.");
    Console.WriteLine(_xmlReceived);
    Console.WriteLine();
    Console.WriteLine("Out msg from ParseXMLToLLRPMessage:\n"); Console.WriteLine(msg); Console.WriteLine();
    Console.WriteLine("Out enumType from ParseXMLToLLRPMessage:\n"); Console.WriteLine(enumType); Console.WriteLine();
}

_xmlReceived是从127.0.0.1 :5084接收的XML转换数据。我必须检查它,它是正确的,它是读者发出的。

在Reader端,我模拟读取器向网关发送消息。在阅读器端,代码是:

代码语言:javascript
复制
public static void testData_PARAM_ROSpecID()
{
    //create and object
    PARAM_ROSpecID _rec_PARAM_ROSpecID = new PARAM_ROSpecID();

    //assign value to an object
    _rec_PARAM_ROSpecID.ROSpecID = 789;

    //Convert obj to xml
    string _xmlData = ConvertObjectToXml(_rec_PARAM_ROSpecID);

    //Convert xml to byte array
    byte [] _byteArray = CommServerSend.getSendBuffInByteAry(_xmlData);

    //Send out.
    CommServerReceive._incomingDataObj.Send(_byteArray);

    return;
}

打印输出数据读取器发送到网关:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-16"?>
<PARAM_ROSpecID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ROSpecID>789</ROSpecID>
</PARAM_ROSpecID> 

从读卡器接收的数据网关打印输出:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-16"?>
<PARAM_ROSpecID xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ROSpecID>789</ROSpecID>
</PARAM_ROSpecID>

但在使用Org.LLRP.LTK.LLRPV1.LLRPXmlParser.ParseXMLToLLRPMessage(_xmlReceived, out msg, out enumType);进行处理并打印出msg和enumType之后:

代码语言:javascript
复制
Out msg from ParseXMLToLLRPMessage:
Out enumType from ParseXMLToLLRPMessage: 0

请帮助我,并尽快回复。非常感谢您的努力。

EN

回答 1

Stack Overflow用户

发布于 2017-09-18 23:52:04

空的obj变量意味着该方法无法从传入的xml中提取消息。我会更仔细地查看xml,看看是否有什么问题。

下面是代码如何使用ParseXMLToLLRPMessage()进行查找的示例:

代码语言:javascript
复制
            Org.LLRP.LTK.LLRPV1.DataType.Message obj;
            ENUM_LLRP_MSG_TYPE msg_type;

            // read the XML from a file and validate its an SET_READER_CONFIG
            try
            {
                FileStream fs = new FileStream(@"setReaderConfig.xml", FileMode.Open);
                StreamReader sr = new StreamReader(fs);
                string s = sr.ReadToEnd();
                fs.Close();

                LLRPXmlParser.ParseXMLToLLRPMessage(s, out obj, out msg_type);

                if (obj == null || msg_type != ENUM_LLRP_MSG_TYPE.SET_READER_CONFIG)
                {
                    Console.WriteLine("Could not extract message from XML");
                    return;
                }
            }
            catch
            {
                Console.WriteLine("Unable to convert to valid XML");
                return;
            }

            // Communicate that message to the reader
            MSG_SET_READER_CONFIG msg = (MSG_SET_READER_CONFIG)obj;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45808659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档