首頁 >Java >如何解析無效(錯誤/格式不正確)的 XML?

如何解析無效(錯誤/格式不正確)的 XML?

PHPz
PHPz轉載
2024-02-09 23:20:40759瀏覽

php小編百草為您介紹如何解析無效的XML檔。在處理XML檔案時,有時會遇到無效的XML,可能是因為格式不正確或包含錯誤。解析無效的XML檔案是一項重要的任務,以確保我們能夠正確地取得所需的資料。為了解決這個問題,我們可以使用PHP的內建函數和函式庫來檢查和修復無效的XML。下面我們將詳細介紹幾種常用的方法來解析無效的XML檔。

問題內容

目前,我正在開發一項功能,該功能涉及解析我們從其他產品收到的 xml。我決定針對一些實際的客戶資料執行一些測試,看起來其他產品允許使用者輸入應被視為無效的輸入。無論如何,我仍然必須嘗試找出解析它的方法。我們正在使用 javax.xml.parsers.documentbuilder,我在輸入時收到以下錯誤。

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

如您所知,描述中似乎包含無效標籤(d30036ddc824403d51b03f80ff62bdc4)。現在,這個描述標籤被認為是葉標籤,並且內部不應該有任何嵌套標籤。無論如何,這仍然是一個問題,並在 documentbuilder.parse(...) 上產生異常

我知道這是無效的 xml,但可以預見它是無效的。關於解析此類輸入的方法有什麼想法嗎?

解決方法

“xml”比無效更糟-它格式不正確;請參閱

  1. #格式良好與有效的xml
  2. 對違規行為的可預測性進行非正式評估沒有幫助。該文字資料不是 xml。沒有一致的 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演示 p>

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

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

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

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

以上是如何解析無效(錯誤/格式不正確)的 XML?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除