Rumah > Java > Bagaimana untuk menghuraikan XML yang tidak sah (ralat/cacat)?

Bagaimana untuk menghuraikan XML yang tidak sah (ralat/cacat)?

PHPz
Lepaskan: 2024-02-09 23:20:40
ke hadapan
793 orang telah melayarinya

Editor PHP Baicao memperkenalkan anda cara menghuraikan fail XML yang tidak sah. Semasa memproses fail XML, anda kadangkala menghadapi XML yang tidak sah, mungkin kerana ia tidak terbentuk dengan baik atau mengandungi ralat. Menghuraikan fail XML yang tidak sah adalah tugas penting untuk memastikan kami mendapat data yang diperlukan dengan betul. Untuk menyelesaikan masalah ini, kami boleh menggunakan fungsi dan pustaka terbina dalam PHP untuk menyemak dan membetulkan XML yang tidak sah. Di bawah ini kami akan memperkenalkan secara terperinci beberapa kaedah yang biasa digunakan untuk menghuraikan fail XML yang tidak sah.

Kandungan soalan

Pada masa ini, saya sedang mengusahakan ciri yang melibatkan penghuraian xml yang kami terima daripada produk lain. Saya memutuskan untuk menjalankan beberapa ujian terhadap beberapa data pelanggan sebenar dan nampaknya produk lain membenarkan pengguna memasukkan input yang sepatutnya dianggap tidak sah. Bagaimanapun, saya masih perlu mencuba mencari cara untuk menghuraikannya. Kami menggunakan javax.xml.parsers.documentbuilder dan saya mendapat ralat berikut semasa menaip.

<xml>
  ...
  <description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description>
  ...
</xml>
Salin selepas log masuk

Seperti yang anda ketahui, penerangan nampaknya mengandungi teg yang tidak sah (<this-is-part-of-description>)。现在,这个描述标签被认为是叶标签,并且内部不应该有任何嵌套标签。无论如何,这仍然是一个问题,并在 documentbuilder.parse(...) pengecualian dijana pada

Saya tahu ini xml tidak sah, tetapi boleh diramalkan tidak sah. Sebarang idea tentang cara untuk menghuraikan input tersebut?

Penyelesaian

"xml" lebih teruk daripada tidak sah - ia tidak terbentuk dengan baik ; lihat berbentuk baik berbanding xml yang sah.

Penilaian tidak formal tentang kebolehramalan pelanggaran tidak membantu. Data teks bukan xml. Tiada alat atau pustaka xml yang konsisten yang boleh membantu anda menanganinya.

Pilihan, ideal dahulu:

  1. Biar penyedia menyelesaikan sendiri isu tersebut. Memerlukan xml yang dibentuk dengan baik. (Secara teknikal, istilah xml yang dibentuk dengan baik adalah berlebihan, tetapi boleh membantu dengan penekanan.)

  2. Gunakan penghurai tag toleranuntuk menyelesaikan isu sebelum menghuraikan ke 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+);)
      Salin selepas log masuk

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

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

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

      Atas ialah kandungan terperinci Bagaimana untuk menghuraikan XML yang tidak sah (ralat/cacat)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan