标签: tinyxml

TinyXml可以从字符串而不是文件加载Xml吗?

我正在为我的应用程序使用TinyXml库,但TiXmlDocument对象只能加载Xml文件.如何从字符串加载Xml.你能告诉我这样做的方法吗?非常感谢你

涂.

tinyxml tinyxml++

15
推荐指数
1
解决办法
1万
查看次数

TinyXML:将文档保存为char*或string

我正在尝试使用TinyXML从内存中读取和保存,而不是仅将文件读取并保存到磁盘.

似乎documnent的解析函数可以加载char*.但是当我完成它时,我需要将文档保存到char*.有谁知道这个?

编辑:打印和流媒体功能不是我想要的.它们以可视格式输出,我需要实际的xml内容.

编辑:打印很酷.

c++ tinyxml

14
推荐指数
3
解决办法
2万
查看次数

TinyXML的UTF-8支持如何工作?

我正在使用TinyXML来解析/构建XML文件.现在,根据文档,该库通过UTF-8支持多字节字符集.到目前为止,我认为这么好.但是,库提供的唯一API(用于获取/设置元素名称,属性名称和值,...使用字符串的所有内容)是通过std::stringconst char*.这让我怀疑自己对多字节字符集支持的理解.如何只支持8位字符的字符串包含16位字符(除非它使用代码页,这将否定'支持Unicode'声明)?我理解你理论上可以采用一个16位的代码点并将其分成2个字符std::string,但这不会改变std::string 对于'Unicode'字符串,它会使其在大多数情况下无效,并且在写入文件并由另一个程序读入时可能会意外地工作.

那么,有人可以向我解释一个库如何提供一个'8位接口'(std::stringconst char*)并仍然支持'Unicode'字符串?

(我可能在这里混淆了一些Unicode术语;对于任何来自此的混淆感到抱歉).

c++ unicode tinyxml utf-8

12
推荐指数
1
解决办法
4846
查看次数

我应该使用XPath还是只使用DOM?

我有一堆存储在XML文件中的分层数据.我正在使用TinyXML将其包装在手工制作的类之后.给定一个XML片段,将源签名描述为一组(频率,级别)对,如下所示:

<source>
  <sig><freq>1000</freq><level>100</level><sig>
  <sig><freq>1200</freq><level>110</level><sig>
</source>
Run Code Online (Sandbox Code Playgroud)

我用这个提取对:

std::vector< std::pair<double, double> > signature() const
{
    std::vector< std::pair<double, double> > sig;
    for (const TiXmlElement* sig_el = node()->FirstChildElement ("sig");
        sig_el;
        sig_el = sig_el->NextSiblingElement("sig"))
    {
        const double level = boost::lexical_cast<double> (sig_el->FirstChildElement("level")->GetText());
        const double freq =  boost::lexical_cast<double> (sig_el->FirstChildElement("freq")->GetText());
        sig.push_back (std::make_pair (freq, level));
    }
    return sig;
}
Run Code Online (Sandbox Code Playgroud)

其中node()指向<source>节点.

问题:我是否会使用XPath库来获得更整洁,更优雅,更易于维护或更好的代码?

更新:我已经尝试过两种方式使用TinyXPath.它们都没有实际工作,这显然是对他们的一个重点.我做了一些根本错误的事吗?如果这是XPath的样子,我认为这对我没有任何帮助.

std::vector< std::pair<double, double> > signature2() const
{
    std::vector< std::pair<double, double> > sig;
    TinyXPath::xpath_processor source_proc (node(), "sig");
    const unsigned n_nodes = source_proc.u_compute_xpath_node_set();
    for (unsigned i = …
Run Code Online (Sandbox Code Playgroud)

c++ xml xpath tinyxml

9
推荐指数
1
解决办法
7812
查看次数

Tinyxml - 定位x64平台时链接错误

我正在使用tinyxml库来解析项目中的XML文件.当我尝试定位x64平台时,我得到了LINKER错误,这里有一个错误:

错误4错误LNK2001:未解析的外部符号"private:static struct TiXmlString :: Rep TiXmlString :: nullrep_"(?nullrep_ @ TiXmlString @@ 0URep @ 1 @ A)ClassThatUsesTinyXML.obj

更新:我认为没有安装x64版本的tinyxml,但是当我尝试为x64平台构建库时,我遇到了这个错误:

LNK1561: entry point must be defined
Run Code Online (Sandbox Code Playgroud)

c++ tinyxml

8
推荐指数
2
解决办法
4085
查看次数

如何使用TinyXml来解析特定元素

我想从TinyXml输出中解析一组元素.本质上,我需要选择端口的任何端口元素"portid"属性的状态"open"(如下面的端口23所示).

最好的方法是什么?这是TinyXml输出的(简化)列表:

<?xml version="1.0" ?>
<nmaprun>
    <host>
        <ports>
            <port protocol="tcp" portid="22">
                <state state="filtered"/>
            </port>
            <port protocol="tcp" portid="23">
                <state state="open "/>
            </port>
            <port protocol="tcp" portid="24">
                <state state="filtered" />
            </port>
            <port protocol="tcp" portid="25">
                <state state="filtered" />
            </port>
            <port protocol="tcp" portid="80">
                <state state="filtered" />
            </port>
        </ports>
    </host>
</nmaprun>
Run Code Online (Sandbox Code Playgroud)

c++ xml tinyxml

7
推荐指数
1
解决办法
1万
查看次数

pugixml vs tinyxml

简短的问题:有关pugixml和tinyxml比较的任何意见吗?

细节我需要使用XML解析器/编写器.我的软件是用C++编写的.

在我看来,TinyXML和pugixml都是不错的选择(RapidXML也很好,但它的界面似乎并不像上面那样容易,因为我必须自己管理数据分配).

人们对两者之间的比较有何评论?我正在开发一个嵌入式平台,因此内存处理对我很重要,我需要能够解析和编写XML数据.

速度并不重要,但内存使用和界面更容易.

谢谢.PS我正在处理的XML文件相当小(最大大小= 1200字节;最大元素= 6或7; XML文件相当简单).

c++ xml tinyxml pugixml

7
推荐指数
1
解决办法
6309
查看次数

使用TinyXML解析XML元素

更新:仍然无法正常工作:(我已更新代码部分以反映我目前拥有的内容.

对于使用过TinyXML的人来说,这应该是一个非常简单的问题.我正在尝试使用TinyXML来解析XML文档并提取一些值.我想出了昨天如何在库中添加,我已经成功加载了文档(嘿,这是一个开始).

我一直在阅读手册,我无法弄清楚如何提取个人属性.谷歌搜索后,我还没有找到我的具体例子的例子,所以也许这里使用过TinyXML的人可以提供帮助.下面是XML的一部分,我已经开始解析它了.

XML:

<EGCs xmlns="http://tempuri.org/XMLSchema.xsd">
  <card type="EGC1">
    <offsets>
      [ ... ]
    </offsets>
  </card>

   <card type="EGC2">
    <offsets>
      [ ... ]
    </offsets>
  </card>
</EGCs>
Run Code Online (Sandbox Code Playgroud)

加载/解析代码:

TiXmlDocument doc("EGC_Cards.xml");
if(doc.LoadFile())
{
    TiXmlHandle hDoc(&doc);
    TiXmlElement* pElem;
    TiXmlHandle hRoot(0);
    pElem = hDoc.FirstChildElement().Element();
    if (!pElem) return false;
    hRoot = TiXmlHandle(pElem);

    //const char *attribval = hRoot.FirstChild("card").ToElement()->Attribute("card");
    pElem = hDoc.FirstChild("EGCs").Child("card", 1).ToElement();
    if(pElem)
    {
        const char* tmp = pElem->GetText();
        CComboBox *combo = (CComboBox*)GetDlgItem(IDC_EGC_CARD_TYPE);
        combo->AddString(tmp);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想拉出每张卡片"type"并将其保存为字符串以放入组合框中.如何访问此属性成员?

c++ xml tinyxml xml-parsing

6
推荐指数
1
解决办法
3万
查看次数

在使用TinyXml for C++时,我需要清理哪些内存管理?

我正在使用TinyXml执行以下操作:

TiXmlDocument doc;
TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );
TiXmlElement* main = new TiXmlElement("main");

TiXmlElement* header = new TiXmlElement("header");
header->SetAttribute("attribute","somevalue");
main->LinkEndChild(header);

// ... Add many more TiXmlElment* to other elements all within "main" element

doc.LinkEndChild(decl);
doc.LinkEndChild(main);

// ... do stuff with doc

// Now I am done with my doc. What memory management happens here? 
Run Code Online (Sandbox Code Playgroud)

在我的程序执行结束时,是否会在超出范围TiXmlElement*时清理所有内容doc?我是否需要遍历文档树并释放所有内存?

c++ memory-management tinyxml

5
推荐指数
1
解决办法
3980
查看次数

使用 buffer_cast 与 std::string 与 ostringstream 将 Streambuf 提升为 const char*

我有一个使用 boost::read_until 和 boost::streambuf 的客户端/服务器应用程序。我正在从套接字读取 XML 消息,并希望使用 tinyXML2 来解析它,如下所示:

XMLDocument doc;
doc.parse(strPtr); // strPtr is const char* 
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式从streambuf中提取const char *strPtr。到目前为止,我在堆栈交换上找到了三种方法:

// method 1, string constructor
const char * streambufToPtr(boost::asio::streambuf &message) {
    boost::asio::streambuf::const_buffers_type bufs = message.data();
    std::string astr(boost::asio::buffers_begin(bufs), boost::asio::buffers_begin(bufs) + message.size());
    return astr.c_str();
}

// method 2, stringstream
const char * streambufToPtr(boost::asio::streambuf &message) {
    std::ostringstream ss;
    ss << &message;
    std::string astr = ss.str();
    return astr.c_str();
}

// method 3, buffer_cast
const char * streambufToPtr(boost::asio::streambuf &message) {
    const char* bufPtr=boost::asio::buffer_cast<const char*>(message.data());
    return …
Run Code Online (Sandbox Code Playgroud)

c++ xml boost tinyxml streambuf

5
推荐指数
1
解决办法
4030
查看次数