Tôi đã viết một kịch bản đơn giản để phân tích cú pháp nhật ký trò chuyện XML bằng mô-đun BeautifulSoup. Tiêu chuẩn soup.prettify() hoạt động ok ngoại trừ các bản ghi trò chuyện có rất nhiều lông tơ trong chúng. Bạn có thể nhìn thấy cả hai mã kịch bản và một số các tập tin đầu vào XML Tôi đang làm việc với bên dưới:Python Phân tích cú pháp XML của BeautifulSoup
Mã
import sys
from BeautifulSoup import BeautifulSoup as Soup
def parseLog(file):
file = sys.argv[1]
handler = open(file).read()
soup = Soup(handler)
print soup.prettify()
if __name__ == "__main__":
parseLog(sys.argv[1])
thử nghiệm XML Input
<?xml version="1.0"?>
<?xml-stylesheet type='text/xsl' href='MessageLog.xsl'?>
<Log FirstSessionID="1" LastSessionID="2"><Message Date="10/31/2010" Time="3:43:48 PM" DateTime="2010-10-31T20:43:48.937Z" SessionID="1"><From><User FriendlyName="Jon"/></From> <To><User FriendlyName="Bill"/></To><Text Style="font-family:Segoe UI; color:#000000; ">hey, what's up?</Text></Message>
<Message Date="10/31/2010" Time="3:44:03 PM" DateTime="2010-10-15T20:44:03.421Z" SessionID="1"><From><User FriendlyName="Jon"/></From><To><User FriendlyName="Bill"/></To><Text Style="font-family:Segoe UI; color:#000000; ">Got your message</Text></Message>
<Message Date="10/31/2010" Time="3:44:31 PM" DateTime="2010-10-15T20:44:31.390Z" SessionID="2"><From><User FriendlyName="Bill"/></From><To><User FriendlyName="Jon"/></To><Text Style="font-family:Segoe UI; color:#000000; ">oh, great</Text></Message>
<Message Date="10/31/2010" Time="3:44:59 PM" DateTime="2010-10-15T20:44:59.281Z" SessionID="2"><From><User FriendlyName="Bill"/></From><To><User FriendlyName="Jon"/></To><Text Style="font-family:Segoe UI; color:#000000; ">hey, i gotta run</Text></Message>
Tôi muốn có thể xuất kết quả này thành định dạng như sau hoặc ít nhất một thứ có thể đọc được nhiều hơn XML thuần túy:
Jon: Xin chào, có chuyện gì vậy? [10/31/10 @ 3: 43p]
Jon: Got thông điệp của bạn [10/31/10 @ 3: 44p]
Bill: oh, tuyệt vời [10/31/10 @ 3 : 44p]
vv .. Tôi đã nghe một số điều thú vị về mô-đun PyParsing, có lẽ đã đến lúc cho nó một cảnh quay.
Tại sao không XSLT? Đó sẽ là cách dễ nhất. (Trong thực tế: tôi thấy có một chỉ thị? Xml-stylesheet - biểu định kiểu mặc định trông như thế nào?) –
Tôi có thể không luôn có biểu định kiểu XSL, do đó cần phải có thứ gì đó để định dạng nhật ký thành thứ gì đó dễ đọc hơn một chút . Nếu tôi có thể sử dụng cùng một bản định kiểu giống như tôi có, điều đó cũng có thể hoạt động. –