Uživatelské nástroje

Nástroje pro tento web


xml

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
xml [2016/04/13 10:48] – [libXML2] djbuldogxml [2025/08/28 10:09] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
 ====== XML ====== ====== XML ======
- 
-{{:xml-decision-diag.png?500|http://stackoverflow.com/questions/9387610/what-xml-parser-should-i-use-in-c}} 
- 
-===== libXML2 ===== 
- 
-  * [[http://xmlsoft.org/tutorial/index.html|tutoriál vhodný pro začátek]] 
-  * [[http://www.xmlsoft.org/html/index.html|programátorská dokumentace]] 
  
   * XML   * XML
Řádek 14: Řádek 7:
       * například: ''<element1/>'' - prázdný element s názvem element1       * například: ''<element1/>'' - prázdný element s názvem element1
     * element může mít atributy     * element může mít atributy
-      * například: ''<element1 atr1='hodnota' atr2='hodnota2'>..</element1>+      * například: ''<element1 atr1='hodnota' atr2=\'hodnota2'>..</element1>'' 
 +    * element může mít i návěští 
 +      * například: ''<namespace1:element1/>'' 
 +    * jako uzel se označuje element nebo hodnota elementu
  
-  * existuje více způsobů jak s XML pracovat+  * existuje více způsobů jak s XML pracovat, nejčastěji:
     * pomocí parseru     * pomocí parseru
       * DOM (DOM = Document Object Model) - z XML vyrobí obraz (strom) v paměti.       * DOM (DOM = Document Object Model) - z XML vyrobí obraz (strom) v paměti.
       * SAX (SAX = Simple API for XML) - postupně prochází XML a vyvolává události (uživatelské callback).       * SAX (SAX = Simple API for XML) - postupně prochází XML a vyvolává události (uživatelské callback).
     * pomocí [[http://www.w3schools.com/xsl/xpath_intro.asp|xpath]] - vyhledání elementů výrazem     * pomocí [[http://www.w3schools.com/xsl/xpath_intro.asp|xpath]] - vyhledání elementů výrazem
-    * přímé procházení, viz následující jednoduchý příklad:+    * přímé procházení voláním funkcí (tj. dej další uzel, dej potomky, .. ) 
 + 
 +{{:xml-decision-diag.png?500|http://stackoverflow.com/questions/9387610/what-xml-parser-should-i-use-in-c}} 
 + 
 +===== libXML2 ===== 
 + 
 +  * [[http://xmlsoft.org/tutorial/index.html|tutoriál vhodný pro začátek]] 
 +  * [[http://www.xmlsoft.org/html/index.html|programátorská dokumentace]] 
 + 
 +  * podporuje SAX i Xpath 
 +  * měl jsem ale případ XML, kde mi ani jedno řešení nepřišlo vhodné 
 +  * použil jsem přímé procházení, viz následující příklad 
 + 
 +===== Přímé procházení =====
  
 <code xml> <code xml>
Řádek 97: Řádek 106:
 } }
 </code> </code>
 +
 +  * ukázka parsování atributů
 +
 +<code xml>
 +..
 +<parameter name="PerspectiveSeason" value="183"/>
 +<parameter name="LockConfig" value="0"/>
 +<parameter name="extServices" value="1"/>
 +<parameter name="currentMaxThreads" value="2"/>
 +<parameter name="resolveFilter" value="LAN"/>
 +..
 +</code>
 +
 +<code cpp>
 +   // look for parameters
 +    while (cur != NULL) {
 +        if (cur->type == XML_ELEMENT_NODE) {
 +
 +            if ((!xmlStrcmp(cur->name, (const xmlChar *)"parameter"))) {
 +
 +                // look for name and value of parameter
 +                char *name = NULL;
 +                char *value = NULL;
 +                xmlAttr *attribute = NULL;
 +
 +                attribute = cur->properties;
 +                while(attribute && attribute->name && attribute->children) {
 +
 +                    if ((!xmlStrcmp(attribute->name, (const xmlChar *)"name"))) {
 +                        if (name) xmlFree(name);
 +                        name = (char*)xmlNodeListGetString(cur->doc, attribute->children, 1);
 +                    }
 +                    if ((!xmlStrcmp(attribute->name, (const xmlChar *)"value"))) {
 +                        if (value) xmlFree(value);
 +                        value = (char*)xmlNodeListGetString(cur->doc, attribute->children, 1);
 +                    }
 +
 +                    attribute = attribute->next;
 +                }
 +
 +                if ((value)&&(name)) {
 +                    if (!strcmp((char*)name,"extServices")) {
 +                        ext_allowed = (!strcmp((char*)value,"1"));
 +                    }
 +                }
 +
 +                if (name) xmlFree(name);
 +                if (value) xmlFree(value);
 +            }
 +        }
 +        cur = cur->next;
 +    }
 +</code>
 +===== Vyhledávání přes Xpath =====
 +
xml.1460537331.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki