Ben orta büyüklükte bir XML dosyası (6MB) işlemek için XMLReader ve PHP kullanarak ve temelde nitelik verilerini parçalamak ve kendi veritabanına takın ediyorum. Sorun her eleman aynı adlı özelliklere sahip altöğeye bir değişken numarası vardır, olduğunu.
İşte bir örnek (bu govtrack.us hükümet nezaket konusunda açık veri) bulunuyor:
<?xml version="1.0" ?>
<people>
<person id='400001' lastname='Abercrombie' firstname='Neil' birthday='1938-06-26' gender='M' pvsid='26827' osid='N00007665' bioguideid='A000014' metavidid='Neil_Abercrombie' youtubeid='hawaiirep1' name='Rep. Neil Abercrombie [D, HI-1]' title='Rep.' state='HI' district='1' >
<role type='rep' startdate='1985-01-03' enddate='1986-10-18' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='1991-01-03' enddate='1992-10-09' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='1993-01-05' enddate='1994-12-01' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='1995-01-04' enddate='1996-10-04' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='1997-01-07' enddate='1998-12-19' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='1999-01-06' enddate='2000-12-15' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='2001-01-03' enddate='2002-11-22' party='Democrat' state='HI' district='1' />
<role type='rep' startdate='2003-01-07' enddate='2004-12-09' party='Democrat' state='HI' district='1' url='http://www.house.gov/abercrombie' />
<role type='rep' startdate='2005-01-04' enddate='2006-12-08' party='Democrat' state='HI' district='1' url='http://www.house.gov/abercrombie' />
<role type='rep' startdate='2007-01-04' enddate='2009-01-03' party='Democrat' state='HI' district='1' url='http://www.house.gov/abercrombie' />
<role type='rep' startdate='2009-01-06' enddate='2010-03-01' party='Democrat' state='HI' district='1' url='http://www.house.gov/abercrombie' />
</person>
Ben özellikleri üzerinde yapılacak herhangi bir fantezi mantığı gerekmez. Benim senaryonun başında, zaten ('id' özniteliği dayanarak) bu belirli bir kaydı işlenmiş ettik olmadığını görmek için kontrol edin ve sonra hemen hemen her özelliğini kapmak ve benim db ayrıştırmak. Ama iki sorun vardır:
1) Ben bu kullanın:
$p->getAttribute('id')
alt öğeleri öğesi olduğu gibi 'id' elde etmek için, (ben comment this page olduğunu konuşuyor düşünüyorum, ama emin değilim iki ayrı gibi birçok satır sonlarıyla bana verir Peki bu konuda ne yapmak için).
2) Nasıl her alt eleman sırayla özelliklerini girebilirim? Bu:
$p->getAttribute('startdate')
Bana birden fazla satırla ayırarak her 'startdate' değerini verir. Ben sadece 'rol' altöğeye her yoluyla elemanının kimliği ve ardından diziyi çekmeye gerek.
Herhangi bir fikir?
Yetiştirme için, burada ben bugüne kadar süper basit denetleyici bulunuyor:
$f = base_url().'data/people.xml';
$p = new XMLReader;
$p->open($f);
while($p->read())
{
if($this->_notImported('govtrack',$p->getAttribute('id')))
{
// here I just grab the attributes, put them into arrays to insert, like so:
$insert = array('indiv_name' => $full_name,
'indiv_first' => ($p->getAttribute(‘firstname’)),
'indiv_last' => ($p->getAttribute(‘lastname’)),
'indiv_middle' => ($p->getAttribute(‘middlename’)),
'indiv_other' => ($p->getAttribute(‘namemod’)),
'indiv_full_name' => $full_name,
'indiv_title' => ($p->getAttribute(‘title’)),
'indiv_dob' => ($p->getAttribute(‘birthday’)),
'indiv_gender' => ($p->getAttribute(‘gender’)),
'indiv_religion' => ($p->getAttribute(‘religion’)),
'indiv_url' => ($url)
);
Öğesi için, bu kadar zor değil, ama ben nasıl döngüsü için 'rol' altöğeye her yoluyla bilmek ve ayrı ayrı özelliklerini kapmak yok.