2016-06-20 14 views
2

を解析し、ブロッキングのコメントをスキップするか、削除する必要があります私は、最初の行が解析XMLのlxmlのは、私が

<!-- 

で始まるXMLファイルを持って、この行をスキップして、1行目と2行目の治療のためにlxmlのための方法はありますかlxmlに渡す前に削除する必要がありますか?例えば

Iはlxmlのドキュメント

>>> root = etree.XML("<root><a>TEXT</a></root>") 

>>> find_text = etree.XPath("//text()") 
>>> text = find_text(root)[0] 
>>> print(text) 
TEXT 

及びので、私はこのエラーが発生した最初の行の、実施例を実現しようとしました。

lxml.etree.XMLSyntaxError: Start tag expected, '<' not found, line 1, column 1 

これは私がファイル

from lxml import etree 
from lxml import objectify 
import argparse 
import os 

parser = argparse.ArgumentParser() 
parser.add_argument("path", type=str, nargs="+") 
parser.add_argument('-e', 
        '--extension', 
        default='', 
        help='File extension to filter by.') 

args = parser.parse_args() 
name_pattern = "*" + args.extension 
my_dir = args.path[0] 

for dir_path, subdir_list, file_list in os.walk(my_dir): 
    for name_pattern in file_list: 
     full_path = os.path.join(dir_path, name_pattern) 
     # print(full_path) 
     # print(file_list) 


def getsMeet(file_list): 
    for filename in sorted(file_list): 
     filename=my_dir + filename 
     yield filename 

def parseXML(): 
    """ 
    from mouse parsing a file with objectify 
    http://www.blog.pythonlibrary.org/2012/06/06/parsing-xml-with-python-using-lxml-objectify/ 
    """ 
    for file in getsMeet(file_list): 
     with open(file) as f: 
      xml = f.read() 

      root = objectify.fromstring(xml) 
      print(root.tag) 
      # print(objectify.dump(root)) 
      race = objectify.Element("race") 
      print(objectify.dump(race)) 


parseXML() 

ファイルを実行するために使用しています私のスクリプトで客観化と有効やっダンプルートは完璧に動作している、それが失敗したetreeました。

これは、XMLの最初の要素のコメントと選択された切り取りで、かなり大きなファイルです。

<!-- Copyright Notice: © 2010 Racing NSW (and other parties working with it). NSW racing information,including fields, form and results, is subject to copyright which is owned by Racing NSW and other parties working with it. --> 
<meeting id="42977" barriertrial="0" venue="Rosehill Gardens" date="2016-05-21T00:00:00" gearchanges="-1" stewardsreport="-1" gearlist="-1" racebook="0" postracestewards="0" meetingtype="TAB" rail="Timing - Electronic : Rail - +6m" weather="Fine  " trackcondition="Good 3 " nomsdeadline="2016-05-16T11:00:00" weightsdeadline="2016-05-17T16:00:00" acceptdeadline="2016-05-18T09:00:00" jockeydeadline="2016-05-18T12:00:00"> 
</meeting> 
+1

'<! - 'はコメントタグですが、無視するかプログラムで削除することができます(ただし、タグを囲むことを忘れないように注意してください)。 [Here](http://stackoverflow.com/a/18313932/5922757)では、lxmlを使用してXMLでコメントをスキップする方法を見ることができます。 XMLファイル全体がコメントアウトされていますか?あなたの例では、あなたのファイルの場合のようにコメントタグは見えません。 – Jezor

+1

文書要素タグの前のコメントノードは、xmlパーサによって正しく認識されているはずです... lxmlのバグかもしれません... –

+1

ファイルを読み込むために使用しているコードを含めることができますか? XMLファイル自体からいくつかの行がありますか? –

答えて

2

コメントは本当にetreeでは問題を起こさないはずですし、あなたがparser=et.HTMLParser(remove_comments=True)parser=et.XMLParser(remove_comments=True))はあなたが望むものに応じて渡すことができますが、あなたがコメントを削除したい場合は、python2かのpython3を使用して私のマシン上でされていません。

import lxml.etree as et 

x = et.parse("test.xml", parser=et.HTMLParser(remove_comments=True)) 
print(et.tostring(x)) 
0

著作権に関する注意を抹消してください。 Python 3のUnicode環境で、xml宣言タグを指定せずに、指定されたエンコードなしのxmlドキュメントに拡張ascii文字(著作権シンボル)があります。私は良いことが起こっているとは想像できません。著作権表示を削除し、問題が解消されたことを確認してください。

関連する問題