📄 faq.html
字号:
files such as xmllint will be used instead of the normal system ones). To do this, the Bash command would be <p><code>export PATH=/home/user/myxml/xmlinst/bin:$PATH</code></p> </li> <li>Now suppose you have a program <code>test1.c</code> that you would like to compile with your "private" library. Simply compile it using the command <p><code>gcc `xml2-config --cflags --libs` -o test test.c</code></p> Note that, because your PATH has been set with <code> /home/user/myxml/xmlinst/bin</code> at the beginning, the xml2-config program which you just installed will be used instead of the system default one, and this will <em>automatically</em> get the correct libraries linked with your program.</li> </ul></li> <p></p> <li><em>xmlDocDump() generates output on one line.</em> <p>Libxml2 will not <strong>invent</strong> spaces in the content of a document since <strong>all spaces in the content of a document are significant</strong>. If you build a tree from the API and want indentation:</p> <ol><li>the correct way is to generate those yourself too.</li> <li>the dangerous way is to ask libxml2 to add those blanks to your content <strong>modifying the content of your document in the process</strong>. The result may not be what you expect. There is <strong>NO</strong> way to guarantee that such a modification won't affect other parts of the content of your document. See <a href="http://xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault ()</a> and <a href="http://xmlsoft.org/html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile ()</a></li> </ol></li> <p></p> <li><em>Extra nodes in the document:</em> <p><em>For an XML file as below:</em></p> <pre><?xml version="1.0"?><PLAN xmlns="http://www.argus.ca/autotest/1.0/"><NODE CommFlag="0"/><NODE CommFlag="1"/></PLAN></pre> <p><em>after parsing it with the function pxmlDoc=xmlParseFile(...);</em></p> <p><em>I want to the get the content of the first node (node with the CommFlag="0")</em></p> <p><em>so I did it as following;</em></p> <pre>xmlNodePtr pnode;pnode=pxmlDoc->children->children;</pre> <p><em>but it does not work. If I change it to</em></p> <pre>pnode=pxmlDoc->children->children->next;</pre> <p><em>then it works. Can someone explain it to me.</em></p> <p></p> <p>In XML all characters in the content of the document are significant <strong>including blanks and formatting line breaks</strong>.</p> <p>The extra nodes you are wondering about are just that, text nodes with the formatting spaces which are part of the document but that people tend to forget. There is a function <a href="http://xmlsoft.org/html/libxml-parser.html">xmlKeepBlanksDefault ()</a> to remove those at parse time, but that's an heuristic, and its use should be limited to cases where you are certain there is no mixed-content in the document.</p> </li> <li><em>I get compilation errors of existing code like when accessing <strong>root</strong> or <strong>child fields</strong> of nodes.</em> <p>You are compiling code developed for libxml version 1 and using a libxml2 development environment. Either switch back to libxml v1 devel or even better fix the code to compile with libxml2 (or both) by <a href="upgrade.html">following the instructions</a>.</p> </li> <li><em>I get compilation errors about non existing <strong>xmlRootNode</strong> or <strong>xmlChildrenNode</strong> fields.</em> <p>The source code you are using has been <a href="upgrade.html">upgraded</a> to be able to compile with both libxml and libxml2, but you need to install a more recent version: libxml(-devel) >= 1.8.8 or libxml2(-devel) >= 2.1.0</p> </li> <li><em>XPath implementation looks seriously broken</em> <p>XPath implementation prior to 2.3.0 was really incomplete. Upgrade to a recent version, there are no known bugs in the current version.</p> </li> <li><em>The example provided in the web page does not compile.</em> <p>It's hard to maintain the documentation in sync with the code <grin/> ...</p> <p>Check the previous points 1/ and 2/ raised before, and please send patches.</p> </li> <li><em>Where can I get more examples and information than provided on the web page?</em> <p>Ideally a libxml2 book would be nice. I have no such plan ... But you can:</p> <ul><li>check more deeply the <a href="html/libxml-lib.html">existing generated doc</a></li> <li>have a look at <a href="examples/index.html">the set of examples</a>.</li> <li>look for examples of use for libxml2 function using the Gnome code.<!-- For example the following will query the full Gnome CVS base for the use of the <strong>xmlAddChild()</strong> function: <p><a href="http://cvs.gnome.org/lxr/search?string=xmlAddChild">http://cvs.gnome.org/lxr/search?string=xmlAddChild</a></p> <p>This may be slow, a large hardware donation to the gnome project could cure this :-)</p>--> </li> <li><a href="http://svn.gnome.org/viewcvs/libxml2/trunk/">Browse the libxml2 source</a> , I try to write code as clean and documented as possible, so looking at it may be helpful. In particular the code of <a href="http://svn.gnome.org/viewcvs/libxml2/trunk/xmllint.c?view=markup">xmllint.c</a> and of the various testXXX.c test programs should provide good examples of how to do things with the library.</li> </ul></li> <p></p> <li><em>What about C++ ?</em> <p>libxml2 is written in pure C in order to allow easy reuse on a number of platforms, including embedded systems. I don't intend to convert to C++.</p> <p>There is however a C++ wrapper which may fulfill your needs:</p> <ul><li>by Ari Johnson <ari@btigate.com>: <p>Website: <a href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p> <p>Download: <a href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p> </li> <!-- Website is currently unavailable as of 2003-08-02 <li>by Peter Jones <pjones@pmade.org> <p>Website: <a href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p> </li> --> </ul></li> <li><em>How to validate a document a posteriori ?</em> <p>It is possible to validate documents which had not been validated at initial parsing time or documents which have been built from scratch using the API. Use the <a href="http://xmlsoft.org/html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd()</a> function. It is also possible to simply add a DTD to an existing document:</p> <pre>xmlDocPtr doc; /* your existing document */xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */ dtd->name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */ doc->intSubset = dtd; if (doc->children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd); else xmlAddPrevSibling(doc->children, (xmlNodePtr)dtd); </pre> </li> <li><em>So what is this funky "xmlChar" used all the time?</em> <p>It is a null terminated sequence of utf-8 characters. And only utf-8! You need to convert strings encoded in different ways to utf-8 before passing them to the API. This can be accomplished with the iconv library for instance.</p> </li> <li>etc ...</li></ol><p></p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -