Tag: libxml2

如何使用libxml2使用C编程语言中的模式文件validationxml文件

我一直在尝试使用我的C代码中的模式文件来validationXML文件。 validation成功说明文件是有效还是无效。 但我的问题是它只打印有效/无效。 应该有一个报告/输出关于xml文件中缺少的内容,以防它无效。 可能类似于XML文件中的行号。 希望,我已经清楚了。 这是我的C代码: – int validateXmlFile() { int iError = 0; xmlDocPtr pDoc; xmlDocPtr pSchemaDoc; xmlSchemaParserCtxtPtr pSchemaCtxt; xmlSchemaPtr pSchema; xmlSchemaValidCtxtPtr pValidCtxt; char * xmlFilename = “C:\\Documents and Settings\\pbhatia\\Desktop\\Schema\\ipt_config.xml”; char * schemaFilename = “C:\\Documents and Settings\\pbhatia\\Desktop\\Schema\\ipt_config.xsd”; PRNT(printf(“Schema file : %s \n”, schemaFilename)); PRNT(printf(“XML file : %s \n”, xmlFilename)); pDoc = xmlReadFile(xmlFilename, NULL, […]

链接libxml2时出错

我有一个libxml2的简单示例,但它返回以下错误: $ gcc -Wall -lxml2 -I/usr/include/libxml2 -o ex1 ex1.c /tmp/cc6OKSKJ.o: In function `main’: ex1.c:(.text+0x60): undefined reference to `xmlReadFile’ ex1.c:(.text+0x70): undefined reference to `xmlDocGetRootElement’ collect2: ld returned 1 exit status $ xml2-config –libs -lxml2 $ xml2-config –cflags -I/usr/include/libxml2 我在Lubuntu 11.10 x86_64上,我有我需要的所有软件包(我认为):libxml2,libxml2-dev,libxml2-dbg …这是示例的代码: // gcc -Wall -lxml2 -I/usr/include/libxml2 -o ex1 ex1.c #include #include #include int main(int argc, […]

如何在Windows上将libxml2与zlib1链接?

我需要为我的TeamSpeak 3插件编译libxml2 32位和64位二进制文​​件,因为我找不到dll / lib 64位下载。 当我使用我编译的libxml2.dll作为命令提示符应用程序中的依赖项时,它工作得很好。 但是,当我尝试将其用作TeamSpeak 3中的依赖项时,程序会在启动时立即崩溃。 特别是它在这一行崩溃: https://github.com/NobleUplift/TeamSpeak3WebsitePreview/blob/master/ts3websitepreview/plugin.c#L148 这是我在Windows上编译libxml2的批处理脚本: @ECHO OFF CALL “C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat” CD libxml2-2.9.4\win32 nmake clean cscript configure.js compiler=msvc zlib=true prefix=D:\Repos\libxml2\release include=D:\Repos\libxml2\dll\include lib=D:\Repos\libxml2\dll\bin debug=yes nmake nmake install cd ../.. 左侧下载的libxml2.dll可以正常工作。 编译的libxml2.dll在右侧。 我已经尝试使用zlib标志,我将我的zlib标头放在include目录和lib目录中的dll / lib中,但我无法将其链接到DLL中。

xmlParseFile vs xmlReadFile(libxml2)

我正在使用libxml2库编写一些C代码来读取XML文件。 为此目的似乎有两个不同的函数, xmlParseFile和xmlReadFile ,并且我不确定它们之间的区别(除了xmlReadFile()需要一些额外的参数这一事实)。 libxml2网站上的示例有时使用xmlParseFile,有些使用xmlReadFile。 那么什么时候应该使用xmlParseFile?何时应该使用xmlReadFile? 我找不到任何可以解释这一点的东西。

如何获取xmlHashTable的键? (libxml2的)

我正在使用库libxml2来解析XML文档。 然后我在这个库中看到了xmlHashTable 。 是否可以获取xmlHashTable所有键? 我想将所有键存储在一个数组中。 XML文档是: <!DOCTYPE dictionary SYSTEM "dictionary.dtd" [ ]> … 我试图获取外部(解析)实体的所有键(例如nasreq,eap等): ddict_t *ddict_scan(const char* system_directory, const char* filename) { char *path = g_strconcat((const gchar*) system_directory, (const gchar*)filename, (const gchar *)’\0′); xmlDocPtr p1 = getdoc((const char *)path); xmlEntitiesTablePtr ptr2 = p1->intSubset->entities; //to be added } xmlEntitiesTable的类型是xmlHashTable 。

xml缩进和新子的换行符

我有一个看起来像下面的xml文件。 我希望使用函数xmlNewChild()后跟xmlNewProp()将一个名为foo的新子节点添加到节点。 我想生成如下的内容。 但是,我总是最终得到以下结论。 我明白libxml2默认不支持空格。 但是,有没有办法达到我想要的结果? 我需要在新添加的孩子的前面和新行中添加这些标签。 任何帮助,将不胜感激。 谢谢!

使用libxml2 sax解析器时如何从xml获取属性的名称和值?

我试图通过使用libxml2来解析iPhone应用程序上的api,试图在一些通用xmls中检测属性的名称和值。 对于我的项目,解析速度非常重要,所以我决定使用libxml2本身而不是使用NSXMLParser。 现在,作为XMLPerformance的参考,它是用于NSXMLParser和libxml2之间的解析基准的iPhone SDK的示例,我试图在XML解析器处理程序中获取属性的细节,如下所示,但我不知道如何检测它。 /* for example, */ static void startElementSAX(void *ctx, const xmlChar *localname, const xmlChar *prefix, const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes, int nb_defaulted, const xmlChar **attributes) { if (nb_attributes > 0) { NSMutableDictionary* attributeDict = [NSMutableDictionary dictionaryWithCapacity:(NSUInteger)[NSNumber numberWithInt:nb_attributes]]; for (int i=0; i<nb_attributes; i++) { NSString* key = @""; […]

LibXML2中有“二进制转储”或“获取二进制表示”function?

我需要访问加载的XML DOM的内部二进制表示… 有一些转储函数 ,但我没有看到类似“二进制缓冲区”(只有“XML缓冲区”)。 我的最后一个目标是在一些黑盒程序之前和之后逐字节地比较同一文档 ,直接用它们的二进制(当前和缓存)表示,而不转换(到XML文本表示)……所以,这个问题, LibXML2中有一个二进制表示(内存中结构),用于将转储与当前表示进行比较? 我只需要检查当前和转储的DOM是否相同。 细节 这不是比较两个不同DOM对象的问题 ,而是更容易的事情,因为不更改ID等不需要规范表示(!),只需要访问内部表示,因为它比转换为文本快得多。 在“之前和之后”之间有一个黑盒程序 ,例如。 影响(或不影响)某些节点或属性的XSLT Identity转换 。 替代解决方案 …为LibXML2开发一个C函数,逐个节点地比较两个树,如果它们不同则返回false:在树遍历期间,如果树结构发生变化,或者某个nodeValue发生变化,算法将停止比较(返回假)。 …不是理想的,但有助于其他一些算法:如果我可以访问(在LibXML2中) 节点的总数或总长度或大小或md5或sha1 …仅用于优化频繁的情况(对于我的应用程序)比较将返回false,避免完整的比较过程。 笔记 相关问题 如何通过简单快速的比较来检查是否更改了DomDocument? C逐字节比较 libxml xmlNodePtr到原始xml字符串? 使用已解答解决方案的读者警告 问题是“在之前与后箱操作之后进行比较”,但这里有两种后箱 : 众所周知且可控的,如XSLT转换或使用已知库。 您必须知道您的黑盒子不会更改属性顺序或ID内容或非空化(或等)空格。 完全免费的,例如使用外部编辑器(例如在线编辑器更改XHTML),用户和软件可以做任何事情。 我将在“众所周知的”黑盒子的背景下使用解决方案 。 因此,我在上面“详细信息”部分的评论是有效的。 在“完全免费”后台的上下文中,您不能使用“二进制转储的比较”,因为只有规范表示(C14N)才有效进行比较。 为了通过C14N标准进行比较,只有“替代解决方案”(上面评论)是可能的。 对于alternative-1,除了其他之外,您必须在比较一组属性节点之前进行排序。 对于alternative-2( 也在这里讨论 ),生成C14N转储。 PS:当然,使用C14N标准是主观的,取决于应用 :if,p。 例如,对于您的应用,“更改属性顺序”是一个有效/重要的更改,检测它的比较是有效的(!)。

如何在libxml2中添加由string构造的xml节点

我使用Libxml2来编码xml文件中的数据。 我的数据包含“”等标签。 当它转换为xml时,这些标签也会转换为“&lt”和“&gt”。 有没有办法解决这个问题。 我想在解码该xml文件时将这些标记用作xml节点,因此CDATA不是解决此问题的方法。 请为此提供任何解决方案。 谢谢。 示例代码: xmlNewChild(node, NULL, (xmlChar *)”ADDRESS”, (xmlChar *)”Park Streetkolkata”); and output of above code is: <street>Park Street</street><city>Kolkata</city>

如何使用libxml2库在c中解析XML字符串而不是XML doc

使用外部XML文件提到了libxml2文档libxml教程中的所有示例。 如果我需要解析包含XML内容的字符串怎么办? 它是否真的可以在libxml2 C库中使用,或者唯一的解决方案是将字符串保存到文件中并将该文件名作为参数发送到下面的函数。 但它会严重影响性能。 doc = xmlParseFile(docname); libxml2中是否有任何内置函数来解析字符数组?