簡體   English   中英

如何使用Perl的LibXML忽略錯誤的xmlns名稱空間?

[英]How can I ignore a bad xmlns namespace with Perl's LibXML?

我有一個XML文檔,該文檔引用了不可用的名稱空間:

<microplateDoc xmlns="http://moleculardevices.com/microplateML">
...my data is here...
</microplateDoc>

我有一個腳本,可以很好地讀取它,但是只有當我刪除上述兩個標簽時,它才會讀取所有錯誤的腳本。 可以忽略它嗎? 我正在考慮編寫另一個腳本來遍歷所有輸入文件並刪除這兩行,但是我認為可能有更好的方法嗎?

如果確實瀏覽了所有數據文件並刪除了這兩行,那么使用腳本執行此操作的最佳方法是什么? 我想只是打開每個文件,搜索這些術語,刪除它們,保存文件,您能想到一種更好的方法嗎? 謝謝。

我有一個XML文檔,該文檔引用了不可用的名稱空間:

我懷疑您對XML名稱空間感到困惑。 名稱空間是一個統一資源標識符 ,即符合RFC 3305的字符串。雖然(可以)不是,但它不是統一資源定位符 ,因為URL都是URI。

重要的是:僅XML名稱空間以http://開頭並不意味着XML解析器將對其進行查找。 它不會(除非編寫它的人不理解什么是名稱空間,在這種情況下,您將遇到比這更多的問題)。

當您說閱讀此XML文檔的腳本“將所有內容搞砸了”時,您無法說出您的意思。 可以忽略它嗎? 可能會的。 畢竟,名稱空間的部分目的是使可以將信息嵌入XML文檔中,而該文檔的某些使用者可以忽略這些信息。

另一方面,如果您不是唯一使用這些文件的人,則可能會因刪除其他人需要的數據而給自己造成很大的麻煩。

我認為您的命名空間沒有任何問題,除非您確信不會有任何不受歡迎的副作用,否則我不會弄亂輸入文件。 我認為這是一個常見的初學者XML處理錯誤:在訪問該名稱空間中的節點之前,需要在代碼中注冊名稱空間(即綁定到前綴)。

http://perl-xml.sourceforge.net/faq/#namespaces_xpath看起來像一個有用的例子。 我通常不使用Perl,但是我已經看到其他幾種語言都發生了這種情況。

那么,您表示的是,當xml文檔中的命名空間未正確添加前綴時,XML :: LibXML模塊未正確解析xml文件/內容? 解決方法是動態刪除名稱空間。 您可以執行以下操作:

$ xml =〜s / xmlns \\ =([\\ S] +)// m;

這應該刪除所有以xmlns =“”開頭的內容

關於從文件中刪除行,今天早些時候提出了這個確切的問題 (只需在sed選項中添加-d即可刪除匹配的行。)

您可以使用//*[name()="microplateDoc"]類的XPath搜索該節點。 希望這行得通。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM