2010-01-29 15 views
0

Si vous pouvez aider avec ceci, vous êtes un génie.Analyse SGML et stockage dans un tableau PHP

Fondamentalement, je vais avoir un texte comme celui-ci:

<parent wealthy> 
    <parent> 
     <children female> 
     <child> 
      jessica 
      <hobbies> 
      basketball, soccer, video games 
      </hobbies> 
     </child> 
     <child> 
      jane 
      <hobbies> 
      cooking, shopping, boys 
      </hobbies> 
     </child>   
     </children female> 
     <children male> 
     <child> 
     josh 
     <hobbies> 
      tennis, swimming 
     </hobbies> 
     </child> 
     </children male> 
    </parent> 
    </parent wealthy> 
    <parent poor> 
    <parent> 
     <children male> 
     <child> 
      --- 
      <hobbies>...</hobbies> 
     </child> 
     </children male> 
    </parent> 
    </parent poor> 

Donc, en tout, je vais avoir une hiérarchie parent-enfant comme celui-ci:

- parent wealthy/ parent poor /parent something else 
    -- parent 
    -- children male/ children female/children something else 
     -- child 
     -- (name of the child is given without any tags around it) 
     -- hobbies 

Je me demande comment je peux peut-être analyser toutes ces informations et les avoir stockés dans un tableau php/objet/variable tout en maintenant l'ordre dans lequel ils apparaissent? Par exemple, si <parent wealthy> apparaît au-dessus de <parent poor>, je voudrais les garder dans le même ordre, et la même chose se passe si <children male> apparaît avant <children female>. Ce serait presque tout à fait valide XML et je pourrais utiliser SimpleXML pour l'analyser, mais le problème est que le nom de l'enfant n'apparaît pas entre les balises et le client veut le garder ainsi pour la convivialité. par exemple:

<child> 
     jane 
     <hobbies> 
     cooking, shopping, boys 
     </hobbies> 
    </child>  

Voici jane "apparaît en dehors des balises, et <hobbies> apparaissent entre certaines balises.

Comment cela peut-il être analysé? S'il vous plaît donner quelques conseils. Si vous suggérez d'utiliser des expressions rationnelles, veuillez donner les expressions rationnelles qui peuvent être utilisées pour que votre réponse soit acceptée, car je ne connais pas les expressions rationnelles.

Merci. Éditer: Le problème principal est que le client veut mélanger le texte normal avec le texte dans les étiquettes. Par exemple:

text text test <hobbies>...<hobbies>. text text text <age>30</age> 

Comment cela peut-il être analysé?

+0

Je ne pense pas que le jane en dehors d'un tag serait un problème car c'est juste le contenu de l'étiquette. le problème serait cela peut-il être changé en ou Josh

+4

Eh bien, c'est un fichier XML et vous devriez rester à l'écart de l'expression régulière pour le lire. –

+4

Veuillez essayer et créer un titre plus descriptif pour une question. –

Répondre

2

Lorsque vous utilisez le balisage comme ceci:

<child> 
    jane 
    <hobbies> 
    cooking, shopping, boys 
    </hobbies> 
</child>  

jane sera dans l'attribut nodeValue de l'élément child avec SimpleXML lorsque analysé.

Rappelez-vous simplement de trim() la valeur, car il est susceptible de contenir des espaces en raison des balises suivantes.

+0

oui mais je ne peux pas faire ça, c'est le problème. le client veut qu'il soit facile à utiliser pour que les gens tapent ceci. –

+3

Ensuite, je ne comprends pas votre question. Pouvez-vous donner un exemple à quoi vous ressemblez? –

+0

Peut-être que vous avez mal compris? J'ai reformulé ma réponse. –

0

J'ai vu votre réponse sur l'une des réponses comme ... le client veut que ce soit convivial pour que les gens tapent ceci. Une structure XML est l'un des moyens les plus inamicaux d'entrer des informations. En fait, c'est assez masochiste, utilisez plutôt yaml yaml et l'analyser avec spyc

+0

Mais le problème avec YAML reste le même. Le client veut mélanger du texte normal avec des étiquettes. Par exemple: jenny .. un peu plus de texte ... C'est le problème. YAML peut-il aider avec cela, si oui, comment? –

+0

@Click Upvote: Pourquoi voudriez-vous qu'un client édite du XML brut? "Vous entrez dans un monde de douleur." Donnez-leur une interface décente, pour pleurer à haute voix. –

+0

Bien sûr, donner une interface utilisateur serait la meilleure option! Je pensais qu'il y avait une raison sacrée de le garder dans un fichier texte! Deuxième meilleur yaml :) – yannis

2

Je pense que les gens essaient de répondre à la question d'un point de vue technique, mais le problème ici est le processus.

Pourquoi oh pourquoi? Votre client insiste pour entrer des données comme ça? C'est complètement ridicule. Vous aurez même un cauchemar le validant. Laissez seul l'analyser correctement. Dites-lui que vous affichez une interface utilisateur décente pour lui, choisissez votre propre mécanisme de stockage et il permettra d'atténuer tous les problèmes/problèmes et le formatage incorrect que les utilisateurs auront en l'entrant comme ça. C'est la folie.

Une autre chose complètement différente à noter est qu'il semble que les enfants viennent d'un parent. Je n'étais pas au courant homo sapiens était autogame.