2015-04-01 163 views
9

我有一個來自客戶端的XML文件,它具有大於>且小於<的標誌,並且它未通過XML格式檢查。 有沒有辦法解決這個問題,而不要求客戶修復文件?有沒有辦法在XML文件中包含大於或小於符號?

例如

<?xml version="1.0" encoding="UTF-8"?> 

<note Name="PrintPgmInfo <> VDD"> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 
+0

如果您不想讓客戶端修復該文件,那麼顯而易見的解決方案就是讓您自己修復它。如果它是一次性的,編輯它並用預定義的實體引用替換保留的字符;如果這種情況會重複發生,請在您選擇的批處理編輯器中編寫一個sed腳本或等效代碼以進行更改。 (如果您沒有選擇的批處理編輯器,並且遇到類似的問題,那麼您應該瞭解批處理編輯器並善於處理。) – 2015-04-01 20:22:40

回答

3

你將不得不使用XML轉義字符:

" to &quot; 
' to &apos; 
< to &lt; 
> to &gt; 
& to &amp; 

谷歌逃逸XML中的字符以獲取更多信息。

1

直接回答你的問題:

有沒有辦法來解決這個問題,而不要求客戶端修復文件?

是「否」。您收到的數據不是有效的XML,並且您拒絕接受它。我強烈建議回到客戶端,並說他們必須使用David和Rahul提到的Character Entity References提供有效的XML。

0

明明白白回答你的問題沒有,因爲XML格式使用這些字符來表示父和子元素,例如,你不能有任何的價值領域的<> XML文件<note><to><from>

擴大對我的回答:當一個Python腳本使用XML library寫道:<>,圖書館它們轉換爲分別&lt&gt。我不相信這是可能的,因爲它實際上過濾了<>字符以及字符實體引用。這是有道理的 - XML庫正在阻止您中斷用於父項xml.etree.cElementTree.Element或任何子項xml.etree.cElementTree.SubElement對象字段的語法。例如,使用在此great answer代碼塊進行實驗:

import xml.etree.cElementTree as ET 

root = ET.Element("root") 
doc = ET.SubElement(root, "doc") 

ET.SubElement(doc, "field1", name="blah").text = "some <value>" 
ET.SubElement(doc, "field2", name="asdfasd").text = "some <other value>" 

tree = ET.ElementTree(root) 
tree.write("filename.xml") 

這產生<root><doc><field1 name="blah">some &lt;value&gt;</field1><field2 name="asdfasd">some &lt;other value&gt;</field2></doc></root>

美化它:

<root> 
    <doc> 
     <field1 name="blah"> 
      some &lt;value&gt; 
     </field1> 
     <field2 name="asdfasd"> 
      some &lt;other value&gt; 
     </field2> 
    </doc> 
</root> 

然而,並沒有什麼東西手動添加這些字符阻止你:在XML文件中讀取和重新寫,添加文字,即使它包含<> 。如果你想要一個合適的XML文件,只要確保這些字符只用在註釋字段中。

爲您的特定問題,你可以從客戶端的XML文件中的行讀取,那麼要麼刪除<>字符,如果客戶需要它們,將它們移動到行的註釋部分。部分挑戰是你必須離開<note>,`等文件部分...這是具有挑戰性的,但它是可能的!

以下是我期望的結果。

<?xml version="1.0" encoding="UTF-8"?> 

<note Name="PrintPgmInfo VDD"> <!-- PrintPgmInfo <> VDD --> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don't forget me this weekend!</body> 
</note> 
相關問題