我正在为iPhone编写一个静态库,我想知道我在做什么,或者我应该采取不同的方法.
我写的静态库依赖于libxml2.libxml2有一个动态库(dylib)和一个静态库(a).我尝试了两种方法.
方法一 - 当我尝试通过将"-lxml2"添加到"其他链接器标志"来链接静态库时,构建失败并显示以下消息:
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library)
Run Code Online (Sandbox Code Playgroud)
方法二 - 我可以成功链接静态库中的动态库,但我不确定iPhone上是否允许(或正确的方法).即使我正在构建静态库,Apple是否允许链接动态库的静态库?我还在学习静态库,但是根据我的理解,来自dylib的代码将与我的代码结合起来构成一个库,因此与dylib的链接应该不是问题.
总结一下:
我正在尝试使用oauth库连接到twitter.该库需要添加libxml2.dylib.将此添加到SDK 4.1或更低版本时,项目构建成功.但是当我使用xcode 3.2.5和SDK 4.2时,我得到了关于丢失标题的错误
我只是将libxml2.dylib添加到框架然后从目标配置中添加"$ {SDKROOT}/usr/include/libxml2"到标题搜索路径.
我收到错误:libxml/xmlreader.h:没有这样的文件或目录.
我试图添加的twitter oauth库是Twitter + OAuth,这是一个教程,你可以看到它有的src项目,在SDK 4.1上正常工作,甚至不能在SDK4.2 http://mobile.tutsplus编译. COM /教程/ iphone/Twitter的API-iphone /
我错过了什么?
对于格式错误的HTML,哪一个更好,更有用?
我找不到如何使用libxml2.
谢谢.
我正在使用libxml2编写XML解析器.实际上,我完成了它,但有一个非常讨厌的内存问题.该程序首先从我的数据库中获取一些链接,所有这些链接指向XML文件.我用curl下载它们.这个过程很简单:我下载一个文件,然后解析它,依此类推......
问题似乎是解析完成时.Curl下载下一个文件,但似乎没有释放以前的XML,因为我猜libxml2将它加载到RAM中.在解析最后一个XML时,我发现自己有一个~2.6GB的泄漏(是的,其中一些文件非常大......)我的机器只有4GB的RAM.它目前有效,但将来会有更多链接添加到数据库中,所以我现在必须修复它.
我的代码非常基础:
xmlDocPtr doc;
doc = xmlParseFile("data.xml");
/* code to parse the file... */
xmlFreeDoc(doc);
Run Code Online (Sandbox Code Playgroud)
我试过用:
xmlCleanupParser();
Run Code Online (Sandbox Code Playgroud)
但是医生说:"它不会释放任何与文件相关的记忆." (http://xmlsoft.org/html/libxml-parser.html#xmlCleanupParser)
所以,我的问题是:有人知道如何释放所有这些文件相关的内存吗?
我正试图在Go中从头开始创建一个XMPP库(以及后来的服务器)(尽管语言本身是无关紧要的),作为一种学习XMPP协议和服务器软件开发的方法.
正如你们许多人所知,XMPP是基于XML的消息传递协议,它依赖于大量短而频繁的XML流.我认为对于这样的应用程序,基于事件的XML解析器应该更好,因为我不需要DOM和所有这些(如果我错了,请纠正我).请记住,此库适用于服务器,因此可能会同时运行多个实例;
对于该用例libxml2或expat,两者中哪一个具有更好的性能和内存使用?
我正在尝试使用XPath查询选择一个节点,我不明白为什么XML :: LibXML在有xmlns属性时找不到该节点.这是一个演示此问题的脚本:
#!/usr/bin/perl
use XML::LibXML; # 1.70 on libxml2 from libxml2-dev 2.6.16-7sarge1 (don't ask)
use XML::XPath; # 1.13
use strict;
use warnings;
use v5.8.4; # don't ask
my ($xpath, $libxml, $use_namespace) = @ARGV;
my $xml = sprintf(<<'END_XML', ($use_namespace ? 'xmlns="http://www.w3.org/2000/xmlns/"' : q{}));
<?xml version="1.0" encoding="iso-8859-1"?>
<RootElement>
<MyContainer %s>
<MyField>
<Name>ID</Name>
<Value>12345</Value>
</MyField>
<MyField>
<Name>Name</Name>
<Value>Ben</Value>
</MyField>
</MyContainer>
</RootElement>
END_XML
my $xml_parser
= $libxml ? XML::LibXML->load_xml(string => $xml, keep_blanks => 1)
: XML::XPath->new(xml => $xml);
my $nodecount = 0;
foreach …Run Code Online (Sandbox Code Playgroud) 我正在使用libxml2的xmlwriter api编写一个xml文件.
当我用记事本打开文件时,缩进不正确.
有谁知道如何解决它?
非常感谢.
我正在使用libxml2实际处理数据处理代码.我被困在一个无法移除的内存泄漏上.这是生成它的最小代码:
#include <stdlib.h>
#include <stdio.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <omp.h>
int main(void)
{
xmlDoc *doc;
int tn;
char fname[32];
omp_set_num_threads(2);
xmlInitParser();
#pragma omp parallel private(doc,tn,fname)
{
tn = omp_get_thread_num();
sprintf(fname,"testdoc%d.xml",tn);
doc = xmlReadFile(fname,NULL,0);
printf("document %s parsed on thread %d (%p)\n",fname,tn,doc);
xmlFreeDoc(doc);
}
xmlCleanupParser();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
在运行时,输出为:
document testdoc0.xml parsed on thread 0 (0x1005413a0)
document testdoc1.xml parsed on thread 1 (0x1005543c0)
Run Code Online (Sandbox Code Playgroud)
确认我们确实有多线程,并且doc在并行区域中确实是私有的.可以注意到我正确应用了libxml2(http://xmlsoft.org/threads.html)的线程安全说明.Valgrind报道:
HEAP SUMMARY:
in use at exit: 9,000 bytes in 8 blocks …Run Code Online (Sandbox Code Playgroud) 我使用Libxml2来编码xml文件中的数据.我的数据包含"<"和">"等标签.当它转换为xml时,这些标签也会转换为"<"和">".有没有办法解决这个问题.我想在解码那个xml文件时将这些标签用作xml节点,因此CDATA不是解决此问题的方法.请为此提供任何解决方案.谢谢.
示例代码:
xmlNewChild(node, NULL, (xmlChar *)"ADDRESS", (xmlChar *)"<street>Park Street</street><city>kolkata</city>");
and output of above code is:
<person>
<ADDRESS><street>Park Street</street><city>Kolkata</city></ADDRESS>
Run Code Online (Sandbox Code Playgroud) 我遇到以下行为:
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
Run Code Online (Sandbox Code Playgroud)
php文档说NOCDATA"将[CD] CDATA合并为文本节点".对我来说,这意味着CDATA将被视为与文本节点相同 - 或者第三个示例的行为现在将与第二个示例相同.
我无法控制XML(它是来自外部源的提要),否则我只是删除CDATA标记,因为它什么也不做,并且破坏了我想要的行为.
为什么上面的例子表现得如此?有没有办法让SimpleXML以与处理文本节点相同的方式处理CDATA节点?"合并CDATA作为文本节点"实际上做了什么,因为我似乎不理解该选项?
在我提取数据之后,我正在解码,但上面的例子对我来说仍然没有意义.