Codesynthesis - 将字符串值与 C++ 中的序列进行比较

Codesynthesis - Compare string value with sequence in C++

我是 Codesynthesis 的新手,我想知道如何将字符串值与序列进行比较。

例如,我有一个消息 ID“0x100”,我想检查它是否在发送序列中。如果它在那里,我只想获取 ID 为“0x100”的消息的信号名称(在本例中为:"one"),而不是整个序列。

使用我的代码,我可以获得所有发送序列中的所有消息 ID,但我不知道如何使用它们分别将其与字符串变量进行比较,只需从序列中取出一个元素并将其保存到字符串中变量。

我怎样才能做到这一点?

感谢您的帮助!

这是xml:

<record>
  <signals>
    <Send name="Port1">
        <Message id="0x100">
            <Signal name="one"/>
        </Message>
        <Message id="0x101">
            <Signal name="two"/>
            <Signal name="three"/>
            <Signal name="four"/>
        </Message>
        <Message id="0x102">
            <Signal name="five"/>
        </Message>
        <Message id="0x103">
            <Signal name="six"/>
        </Message>
        <Message id="0x104">
            <Signal name="seven"/>
            <Signal name="eight"/>
            <Signal name="nine"/>
            <Signal name="ten"/>
        </Message>
        <Message id="0x105">
            <Signal name="eleven"/>
        </Message>
    </Send>
    <Send name="Port2">
        <Message id="0x106">
            <Signal name="twelve"/>
        </Message>
        <Message id="0x107">
            <Signal name="thirteen"/>
        </Message>
        <Message id="0x108">
            <Signal name="fourteen"/>
        </Message>
        <Message id="0x109">
            <Signal name="fifteen"/>
        </Message>
        <Message id="0x110">
            <Signal name="sixteen"/>
        </Message>
    </Send>
  </signals>
</record>

这就是我从 xml 中读取序列的方式:

string filename = "test.xml";
unique_ptr<record> h(record(filename));

signals::Send_sequence& s(h->signals().Send());
for (signals::Send_iterator i(s.begin()); i != s.end(); ++i)
{
        Send::Message_sequence& s2(i->Message());
        for (Send::Message_iterator j(s2.begin()); j != s2.end(); ++j)
        {
            Message& u(*j);
            cout << u.id() << endl;
        }

}

仅供参考:我找到了解决方案。很简单。

string filename = "test.xml";
unique_ptr<record> h(record(filename));

signals::Send_sequence& s(h->signals().Send());
for (signals::Send_iterator i(s.begin()); i != s.end(); ++i)
{
        Send::Message_sequence& s2(i->Message());
        for (Send::Message_iterator j(s2.begin()); j != s2.end(); ++j)
        {
            Message& u(*j);
            cout << u.id() << endl;

            //Check if theres a message
            if (u.id().present()) {

            //Put the message in a struct array (same with signals)
            info[NumberOfSends].messages[NumberOfMessages] = u.id().get(); //this is how you get it as a string
            NumberOfMessages++;
            }

        }

}NumberOfSends++;

现在您可以使用此数组将其与字符串进行比较。