2017-07-12 2 views
1

Permettez-moi d'abord de dire que je suis novice en programmation et en XML, et je suis ouverte à tout soutien que la communauté peut m'offrir. J'ai écrit mon propre script d'analyse XML dans Matlab pour soutenir un projet dans lequel le traitement de données en temps réel est essentiel. Je n'ai aucun problème de chargement et d'analyse des fichiers XML 'en temps réel'. Le problème que je rencontre concerne les fichiers XML en temps réel. L'erreur produite est la suivante: les structures de document XML doivent commencer et se terminer dans la même entité.Contournement, Erreur: les structures de document XML doivent commencer et se terminer au sein de la même entité.

Explication: J'utilise un logiciel propriétaire pour produire ces fichiers XML en temps réel. Lorsque je clique sur le bouton «Générer des données XML en temps réel» sur le programme d'acquisition de données. Il génère deux fichiers dans mon répertoire choisi. Le premier, est xml_smf (qui est zéro octets et je ne peux pas ouvrir). Le second est un fichier xml dont la taille augmente avec le temps (les données en temps réel sont acquises et placées dans le fichier xml). Le problème avec ce fichier XML temps réel est qu'il ne contient pas de balises de fermeture, ce qui entraîne le lancement de l'erreur 'Structures de document XML doit commencer et se terminer dans la même entité'. Lorsque je clique sur le bouton «arrêter de générer des données XML en temps réel» sur mon programme d'acquisition de données. Le fichier xml_smf disparaît et le fichier xml est enfin mis à jour avec les balises de fermeture. Le problème est que j'ai besoin du programme pour lire les données en temps réel, sans que l'utilisateur sur le terrain n'ait à cliquer en permanence sur le bouton stop/start du programme d'acquisition de données.

Ma question (s) sont les suivantes:

  1. Quelqu'un at-il une expérience avec des fichiers XML_SMF? Des suggestions sur ce qu'ils pourraient être utilisés?

  2. Y at-il un travail autour de moi que je peux appliquer dans Matlab, pour ouvrir le fichier XML et l'ajouter avec les balises de fermeture appropriées?

  3. Avez-vous des recommandations pour un workflow permettant de traiter des données en temps réel (dans Matlab)? J'imagine une sorte de boucle où le fichier XML toujours plus grand est traité toutes les 30 secondes environ.

Répondre

0

Jusqu'à ce que le fichier soit well-formed, ce n'est pas XML. Si son seul problème est une étiquette de fermeture manquante pour l'élément racine, il suffit de lire le fichier en tant que texte et de l'écrire avec la balise de fermeture manquante. (Heureusement, vous ne devrez pas non plus faire face au fait que le fichier soit maintenu ouvert pour être écrit par un autre processus.) Puis le lire comme XML. S'il y a plus de problèmes, voyez How to parse invalid (bad/not well-formed) XML?

+0

Merci pour vos commentaires, kjhughes. Open/Read/Write (append)/Close serait certainement une solution de contournement possible pour traiter les étiquettes ouvertes embêtantes. J'imagine qu'il existe des moyens plus «propres» de lire des données en temps réel, mais il y a quelque chose à dire pour «apprendre à la dure». –

+0

@ J.Will: s'il y a des problèmes avec un processus contenant le (mauvais) fichier XML ouvert, vous pouvez le copier dans un fichier temporaire, le réparer, puis le lire en XML. Répétez chaque fois que le fichier XML incorrect est mis à jour. – halfer

+1

@halfer: Merci allot, cela semble être une bonne idée, je vais essayer. –