Heim >Java >Wie kann ich ungültiges (fehlerhaftes/fehlformatiertes) XML analysieren?

Wie kann ich ungültiges (fehlerhaftes/fehlformatiertes) XML analysieren?

PHPz
PHPznach vorne
2024-02-09 23:20:40759Durchsuche

Der PHP-Editor Baicao stellt Ihnen vor, wie Sie ungültige XML-Dateien analysieren. Bei der Verarbeitung von XML-Dateien stößt man manchmal auf ungültiges XML, möglicherweise weil es nicht wohlgeformt ist oder Fehler enthält. Das Parsen ungültiger XML-Dateien ist eine wichtige Aufgabe, um sicherzustellen, dass wir die erforderlichen Daten korrekt erhalten. Um dieses Problem zu lösen, können wir die in PHP integrierten Funktionen und Bibliotheken verwenden, um ungültiges XML zu überprüfen und zu reparieren. Im Folgenden stellen wir einige häufig verwendete Methoden zum Parsen ungültiger XML-Dateien im Detail vor.

Frageninhalt

Derzeit arbeite ich an einer Funktion, die das Parsen von XML beinhaltet, das wir von anderen Produkten erhalten. Ich habe beschlossen, einige Tests anhand tatsächlicher Kundendaten durchzuführen, und es sieht so aus, als ob andere Produkte es Benutzern erlauben, Eingaben einzugeben, die als ungültig betrachtet werden sollten. Wie auch immer, ich muss immer noch versuchen, einen Weg zu finden, es zu analysieren. Wir verwenden javax.xml.parsers.documentbuilder und ich erhalte beim Tippen die folgende Fehlermeldung.

<xml>
  ...
  <description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description>
  ...
</xml>

Wie Sie vielleicht wissen, scheint die Beschreibung ein ungültiges Tag zu enthalten (d30036ddc824403d51b03f80ff62bdc4)。现在,这个描述标签被认为是叶标签,并且内部不应该有任何嵌套标签。无论如何,这仍然是一个问题,并在 documentbuilder.parse(...) eine Ausnahme wird generiert am

Ich weiß, dass dies eine ungültige XML-Datei ist, aber sie ist vorhersehbar ungültig. Irgendwelche Ideen, wie solche Eingaben analysiert werden können?

Workaround

„xml“ ist schlimmer als ungültig – es ist nicht wohlgeformt ; siehe wohlgeformtes vs. gültiges XML.

Informelle Einschätzungen zur Vorhersehbarkeit von Verstößen sind nicht hilfreich. Die Textdaten sind kein XML. Es gibt kein konsistentes XML-Tool oder keine konsistente XML-Bibliothek, die Ihnen dabei helfen kann.

Optionen, ideal zuerst:

  1. Lassen Sie den Anbieter das Problem selbst lösen. Erfordert wohlgeformtes XML. (Technisch gesehen ist der Begriff „wohlgeformtes XML“ überflüssig, kann aber bei der Hervorhebung hilfreich sein.)

  2. Verwenden Sie einen
  3. toleranten Tag-Parser

    , um Probleme vor dem Parsen in XML zu lösen:

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

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

      • 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演示 p>

      &amp;(?!(?:#\d+|#x[0-9a-f]+|\w+);)

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

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

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

Das obige ist der detaillierte Inhalt vonWie kann ich ungültiges (fehlerhaftes/fehlformatiertes) XML analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen