如何解析無效(錯誤/格式不正確)的 XML?
php小編百草為您介紹如何解析無效的XML檔。在處理XML檔案時,有時會遇到無效的XML,可能是因為格式不正確或包含錯誤。解析無效的XML檔案是一項重要的任務,以確保我們能夠正確地取得所需的資料。為了解決這個問題,我們可以使用PHP的內建函數和函式庫來檢查和修復無效的XML。下面我們將詳細介紹幾種常用的方法來解析無效的XML檔。
問題內容
目前,我正在開發一項功能,該功能涉及解析我們從其他產品收到的 xml。我決定針對一些實際的客戶資料執行一些測試,看起來其他產品允許使用者輸入應被視為無效的輸入。無論如何,我仍然必須嘗試找出解析它的方法。我們正在使用 javax.xml.parsers.documentbuilder
,我在輸入時收到以下錯誤。
<xml> ... <description>Example:Description:<THIS-IS-PART-OF-DESCRIPTION></description> ... </xml>
如您所知,描述中似乎包含無效標籤(<this-is-part-of-description>
)。現在,這個描述標籤被認為是葉標籤,並且內部不應該有任何嵌套標籤。無論如何,這仍然是一個問題,並在 documentbuilder.parse(...)
上產生異常
我知道這是無效的 xml,但可以預見它是無效的。關於解析此類輸入的方法有什麼想法嗎?
解決方法
。
對違規行為的可預測性進行非正式評估沒有幫助。該文字資料不是 xml。沒有一致的 xml 工具或函式庫可以幫助您處理它。- 選項,最理想的第一個:
讓提供者自行解決問題。 需要格式良好的 xml。 (從技術上講,格式良好的 xml 一詞是多餘的,但可能有助於強調。)
使用 寬容標記解析器 - 在解析為 xml 之前解決問題: 具有強大的恢復和修復功能功能
- 信用:
- ##
xmlstarlet fo -o -r -h -d bad.xml 2>/dev/null
登入後複製 獨立和 c/c :
html tidy### 有效也可以使用 xml。 ###taggle### 是一個連接埠tagsoup 到 c 。 ### ### #########python:### ###美麗的湯### 基於python。請參閱###解析器之間的差異###部分中的註解。另請參閱###此問題的答案###以了解更多信息 關於處理 python 中格式不正確的標記的建議, 特別包括###lxml 的 ###recover=true### 選項###。 另請參閱###此答案###以了解如何使用 ###codecs.encodedfile()### 清理非法字元。 ### ### #########java:### ###tagsoup### 和###jsoup### 專注於 html。 ######filterinputstream###### 可用來 ###預處理清理###。 ### ### #########.net:######- xmlreadersettings.checkcharacters 可以 禁用以解决非法 xml 字符问题。
- @jdweng 注释
xmlreadersettings。 conformancelevel
可以设置为conformancelevel.fragment
这样xmlreader
可以读取缺少根元素的 xml 格式良好的解析实体 . - @jdweng 还报告
xmlreader.readtofollowing()
有时可以 用于解决 xml 语法问题,但请注意 下面#3 中的违规警告。 microsoft.language.xml.xmlparser
据说是“容错”的。
转到:设置
decoder.strict
到false
,如示例所示,作者:@chuckx。php:请参阅domdocument::$recover 和 libxml_use_internal_errors(true)。请参阅此处的好示例。
ruby:nokogiri 支持“温和的 well-形式性”。
r:请参阅htmltreeparse() 用于 r 中的容错标记解析。
perl:请参阅xml::liberal ,一个“超级自由的 xml 解析器,可以解析损坏的 xml。”
- 選項,最理想的第一個:
使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束。
对于无效字符错误,请使用正则表达式删除/替换无效字符:
- 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, '')
- php:
对于与号,使用正则表达式将匹配项替换为
&
: 信用:blhsin,演示 p>&(?!(?:#\d+|#x[0-9a-f]+|\w+);)
登入後複製请注意,上述正则表达式不会接受注释或 cdata
按照设计,标准 xml 解析器永远不会接受无效的 xml。
您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。
以上是如何解析無效(錯誤/格式不正確)的 XML?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

是的,H5頁面製作是前端開發的重要實現方式,涉及HTML、CSS和JavaScript等核心技術。開發者通過巧妙結合這些技術,例如使用<canvas>標籤繪製圖形或使用JavaScript控制交互行為,構建出動態且功能強大的H5頁面。

如何使用JavaScript或CSS控制瀏覽器打印設置中的頁首和頁尾在瀏覽器的打印設置中,有一個選項可以控制是否顯�...

關於inline-block元素錯位顯示的原因及解決方案在編寫網頁佈局時,我們常常會遇到一些看似奇怪的顯示問題。比...

如何實現分段器的45度曲線效果?在實現分段器的過程中,如何讓點擊左側按鈕時右側邊框變成45度曲線,而點�...

CSS自定義resize符號的方法與背景色統一在日常開發中,我們經常會遇到需要自定義用戶界面細節的情況,比如調...

實時比特幣美元價格 影響比特幣價格的因素 預測比特幣未來價格的指標 以下是 2018-2024 年比特幣價格的一些關鍵信息: