Maison > Java > Comment analyser du XML invalide (erreur/mal formé) ?

Comment analyser du XML invalide (erreur/mal formé) ?

PHPz
Libérer: 2024-02-09 23:20:40
avant
817 Les gens l'ont consulté

L'éditeur PHP Baicao vous présente comment analyser les fichiers XML invalides. Lors du traitement de fichiers XML, vous rencontrez parfois du XML non valide, peut-être parce qu'il n'est pas bien formé ou qu'il contient des erreurs. L'analyse des fichiers XML invalides est une tâche importante pour garantir que nous obtenons correctement les données requises. Pour résoudre ce problème, nous pouvons utiliser les fonctions et bibliothèques intégrées de PHP pour vérifier et corriger le XML invalide. Ci-dessous, nous présenterons en détail plusieurs méthodes couramment utilisées pour analyser les fichiers XML invalides.

Contenu de la question

Actuellement, je travaille sur une fonctionnalité qui consiste à analyser le XML que nous recevons d'autres produits. J'ai décidé d'effectuer des tests sur certaines données client réelles et il semble que d'autres produits permettent aux utilisateurs de saisir des entrées qui devraient être considérées comme invalides. Quoi qu'il en soit, je dois encore essayer de trouver un moyen de l'analyser. Nous utilisons javax.xml.parsers.documentbuilder et j'obtiens l'erreur suivante lors de la saisie.

<xml>
  ...
  <description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description>
  ...
</xml>
Copier après la connexion

Comme vous le savez peut-être, la description semble contenir une balise invalide (<this-is-part-of-description>)。现在,这个描述标签被认为是叶标签,并且内部不应该有任何嵌套标签。无论如何,这仍然是一个问题,并在 documentbuilder.parse(...) une exception est générée sur

Je sais que ce n'est pas du XML invalide, mais il est, comme on pouvait s'y attendre, invalide. Avez-vous des idées sur les moyens d'analyser une telle entrée ?

Solution de contournement

"xml" est pire que invalide - il n'est pas bien formé  ; voir bien formé vs. xml valide.

Les évaluations informelles de la prévisibilité des violations ne sont pas utiles. Les données texte ne sont pas XML. Il n’existe aucun outil ni bibliothèque XML cohérent qui puisse vous aider à y faire face.

Options, idéal en premier :

  1. Laissez le fournisseur résoudre le problème lui-même. Nécessite un fichier XML bien formé. (Techniquement, le terme xml bien formé est redondant, mais peut aider à mettre l'accent.)

  2. Utilisez un analyseur de balises tolérantpour résoudre les problèmes avant d'analyser en XML :

  3. 使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束

    • 对于无效字符错误,请使用正则表达式删除/替换无效字符:

      • php: preg_replace('/[^\x{0009}\x{000a}\x{000d} \x{0020}-\x{d7ff}\x{e000}-\x{fffd}]+/u', ' ', $s);
      • ruby: string.tr ("^\u{0009}\u{000a}\u{000d}\u{0020}-\u{d7ff}\u{e000‌​}-\u{fffd}", ' ')
      • javascript: inputstr.replace (/[^\x09\x0a\x0d\x20-\xff\x85\xa0-\ud7ff\ue000-\ufdcf\ufde0-\ufffd]/gm, '')
    • 对于与号,使用正则表达式将匹配项替换为 &amp;: 信用:blhsin演示

      &amp;(?!(?:#\d+|#x[0-9a-f]+|\w+);)
      Copier après la connexion

      请注意,上述正则表达式不会接受注释或 cdata

      按照设计,标准 xml 解析器永远不会接受无效的 xml。

      您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。

      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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal