Maison >développement back-end >Tutoriel XML/RSS >Programmation Web - Explication détaillée de l'analyse de la grammaire XML
Avant d'effectuer une analyse grammaticale XML, il est d'abord nécessaire de comprendre les règles de base de la syntaxe XML :
Caractéristiques lexicales : 1) XML est sensible à la casse, comme les noms d'éléments dans balises d'ouverture et de fermeture Les majuscules et les minuscules doivent être cohérentes 1b01232ea6f0577bc4ec8d1a522b6a86…6879c8de8c5e2889d23c06f516d46b6b, et les chaînes de mots réservées de XML doivent répondre aux exigences des majuscules et des minuscules 07941956e4f100af056a0d61df0cce2d ….
2) Les caractères de marque réservés XML sont : 6d267e5fab17ea8bc578f9e7e5e1570b Le symbole
2) La description XML est ouverte par 71ae2c40975c2f92563b127ce52da098, qui contient des descriptions facultatives telles que la version et l'encodage, telles que : 892021e3d67a486f032749808fc5789f<?xml …?> /*XML说明*/ <!DOCTYPE …> /*XML文档说明*/ <!-- … --> /*XML注释*/ <?xml-stylesheet …?> /*XML指令*/ <root> /*根数据元素*/ <child> …<![CDATA[…]]> </child> </root>3) La description du document XML est ouverte par 2bbae693420058f838e005605316a3f5, tel que : 2a1c1ace77d19b27e26388e2e62358dc
4) Les instructions XML sont ouvertes par e7873bff2cb5c6290155e38e61b9e655, telles que : d79042a8674d4ba1a29b08738f364384
5) Les commentaires XML sont ouverts par 942217944a55853554bdfa6153aeb23b, tels que : 3c0cc36a15278c3786b4d61215a8dc2b
6) Les éléments XML sont ouverts par fec56caea761adf538f711849ca9bc2dOpened by />, ou 68a56ae7059556683f46528c5f5d9bdc, les balises d'ouverture et de fermeture de l'élément correspondent, telles que a964f9aea6a098c3296f8e249581be9b ou 5c49c926bc487be6f96606df447708f4…178733e97ec71b870a77daafc67e8e0b, les éléments XML peuvent être imbriqués, la correspondance hiérarchique doit donc être conservée, telle que 5c49c926bc487be6f96606df447708f4e663bf67d432875fde4c932efd4feaf7..48f80ac41c3449a2c0f73671e2cd7ccd2c6b0034fc90fcedc09e7bbf024a11ba et fermé par ]]>, qui est utilisé pour que les instructions qu'il contient évitent les règles d'analyse XML. Par exemple : 42b27496e28bf89995f80f350676eb07
Sur la base des fonctionnalités de grammaire XML ci-dessus, des expressions régulières pour l'analyse lexicale et l'analyse syntaxique peuvent être construites. Structure d'automate pushdown .
Expression régulière lexicale XML :
#define digit [1,2,…,9] /*Caractère numérique*/
#define letter [a,b,…,z,A,B,…, Z] /*Caractères alphabétiques*/
#définir les signes [~, !, @, #, %, ^, &,*,(, ), ?, :, ;, “, ', ,, ., / ,-, _, +, =, |, /] /*Caractère symbole*/
#define ascii2 [0x80,…,0xFF] /*Caractère étendu du tableau ASCII2*/
#define space [0x20, / t, /r, /n] /*Caractère espace, caractère de tabulation, caractère de retour chariot, caractère de saut de ligne*/
#define reserve [95ec6993dc754240360e28e0de8de30a, &] /*Caractères réservés XML*/
1) Expression régulière du nom de l'élément :
element_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*
element_text -> (ε| not reserve)*
proper_name -> (_ | letter | ascii2) (ε| _ | - | : | . | digit | letter | signs | ascii2)*
proper_value -> (ε| not reserve)*
xml_document -> xml_header (ε| xml_declare | xml_instruct | xml_comments)* xml_element xml_header -> [<?xml](space)*(proper_token)*(space)* [?>] xml_declare -> [<!]reserve_word(space)*(token)*(space)*[>] xml_instruct -> [<?]reserve_word(space)* (proper_token)* (space)*[?>] xml_comments -> [<!--](ε| digit | letter | signs | ascii2 | space)*[-- >] xml_element -> [<]element_name (space)*( ε| proper_token)*(space)*[/>] | [<]element_name(space)*( ε | proper_token)*(space)*[>] [ε| <![CDATA[ ]element_text[ε| ]]>] (ε | xml_element)*(space)*[</]element_name[>] proper_token -> proper_name(space)*[=](space)* [ε| <![CDATA[ ] [‘ | “]proper_value[‘ | “] [ε| ]]>] reserve_word -> [DOCTYPE | ELEMENT | NOTATION | …] token -> (ε| not reserve)*
1) STACK_DFA mata_xml_doc = c2c00a4f81bdb39f559c7014143f40dc
Q: {…} /*详见后面的状态集合*/ Σ: /*指向待解析的XML元素词串*/ σ: Q×Σ->Q /*状态转移函数,见状态转移列表*/ q: {NIL_SKIP} /*初始状态*/ Γ: {NIL_FAILED,NIL_SUCCEED} /*终结状态集合*/ S: {Q/*状态*/, N/*DOM节点*/>,<…>} /*下推栈*/
T:{NIL/*空*/, TG/*标记*/, NS/*元素*/, IS/*指令*/, DS/*声明*/, CD/*CDATA界段*/,CM/*注释*/}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!