입력 파일은 실제로 하나의 파일에 추가되는 여러 XML 파일입니다. (출처 : Google Patents).비표준 XML을위한 python과 함께 적절한 xpath 구문
import urllib2, os, zipfile
from lxml import etree
count = 0
for item in xmlSplitter(zf.open(xml_file)):
count += 1
if count > 1: break
doc = etree.XML(item)
docID = "-".join(doc.xpath('//publication-reference/document-id/*/text()'))
title = first(doc.xpath('//invention-title/text()'))
applicant = "-".join(doc.xpath('//applicants/applicant/*/text()'))
print "DocID: {0}\nTitle: {1}\nApplicant: {2}\n".format(docID,title,applicant)
outFile.write(str(docID) +"|"+ str(title) +"|"+ str(applicant) +"\n")
다음 LXML와 Python으로 다음을 사용하여
<applicant>
에서 나는 아이들과 손자 모두를위한
"-".join
XPath는 문자열을 만들려고 해요
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-23.dtd" [ ]> <us-patent-grant lang="EN" dtd-version="v4.2 2006-08-23"> <applicants> <applicant sequence="001" app-type="applicant-inventor" designation="us-only"> <addressbook><last-name>Beyer</last-name> <first-name>Daniel Lee</first-name> <address><city>Franklin</city> <state>TN</state> <country>US</country></address></addressbook> <nationality><country>omitted</country></nationality> <residence><country>US</country></residence> </applicant> <applicant sequence="002" app-type="applicant-inventor" designation="us-only"> <addressbook><last-name>Friedland</last-name> <first-name>Jason Michael</first-name> <address><city>Franklin</city> <state>TN</state> <country>US</country></address></addressbook> <nationality><country>omitted</country></nationality> <residence><country>US</country></residence> </applicant> </applicants> </us-patent-grant> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-23.dtd" [ ]>
:이 예입니다
나는 복수 xpath combinations을 시도했지만, <applicants>
에 하이픈이 포함 된 문자열을 생성 할 수없고, //text()는 손주에게 가지 않습니다. 끈에 도움. 자식과 손자녀 내의 모든 텍스트를 <applicant>
으로 선택하기위한 적절한 xpath 구문은 무엇이며 여전히 문자열로 펀치 아웃합니까? 이 예제에서는 표시되지 않지만 텍스트 줄의 시작 부분에 나타날 수도있는 유니 코드를 무시하는 방법이 있습니다 (일부 XML 문서에 표시됩니다). 내가 좋아하는 뭔가 보일 것입니다 얻을 수 있었으면 해요 '신청자'출력 :
Beyer-Daniel Lee-Franklin-TN-US-omitted-US-Friedland-Jason Michael-Franklin-TN-US-omitted-US
나는이 xpath를 시도했다. // applicants/applicant/*/*/text() | // Beyer-Daniel Lee-Franklin-TN-US-omitted-US-Friedland-Jason Michael-Franklin-TN-US-omitted-// 신청자/지원자/주소록/주소/*/text() 미국. 이것이 원하는 결과물입니까? – RanRag
적어도 내 결과가 보이는 것처럼 예, 아니오. 출력을 연결 했습니까? 내 결과물은'| Roskam-Cameron O.- -Grand Rapids- -MI- -US- -mitted-US |'와 리턴과 여분의 하이픈들로 구성되어있다. 거기에 맞게 문자열에 맞게 얻을 수있는 방법이 있나요? –
'출력을 연결 했습니까? '가 표시되지 않았습니다. – RanRag