2016-08-23 6 views
0

xmlファイルを読み込みと解析のためにリモートで開こうとしていますが、使用しようとするとエラーが発生します。私がそれを印刷すると、認識できない文字から始まります。あなたはxmlファイルをリモートで開き、データを解析できるように私を正しい方向に向けるのを手伝ってもらえますか?読み込みと解析のためにリモートでPythonを開く

XMLファイル:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="Data.xsl"?> 
<abc> 
    <md> 
    <mi> 
     <datetime>20160822020003</datetime> 
     <period>3600</period> 
     <it>Item_No_1</it> 
     <it>Item_No_2</it> 
     <it>Item_No_3</it> 
     <it>Item_No_4</it> 
     <it>Item_No_5</it> 
     <it>Item_No_6</it> 
     <it>Item_No_7</it> 
     <ovalue> 
     <v>1111111111</v> 
     <v>2222222222</v> 
     <v>3333333333</v> 
     <v>4444444444</v> 
     <v>5555555555</v> 
     <v>6666666666</v> 
     <v>7777777777</v> 
     </ovalue> 
    </mi> 
    </md> 
</abc> 

コード:

import xml.etree.ElementTree as ET 

with open('test.xml') as f: 
    for line in f: 
     x = line 
     print(x, end='') 

    root = ET.fromstring(x) 
    print(root.tag) 

エラー:

xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 1 

答えて

0

あなたの例のファイルの最初の2つのバイトがファイルを示すユニコードByte Order Markerは次のようにエンコードされていますUTF-8。

これ以上のものは1xmlのようです。最初の2バイトをスライスするだけで、lxmlはDoctype宣言から正しいエンコーディングを検出します。

root = ET.fromstring(x[3:]) 
+0

試しましたが、問題は修正されませんでした。まだ同じエラーが発生しています。私はlxmlを使用していません。私が試すことができる何か他にありますか? – MBasith

+0

私はいつもllxmlを使用しています。それは 'ElementTree'のAPIに従っているので、私はこれを見ていません。サードパーティ、したがって信頼できないXMLデータを解析する必要がある場合は、https://docs.python.org/2/library/xml.html#xml-vulnerabilities – sebasgo

+0

も、バイトオーダーメーカーは3バイト長です。 – sebasgo

関連する問題