1

Konu: Attribute-centric XML dosyasının açılması

Merhaba,
Aşağıdaki XML dosyasını nasıl cursor'e çevirebilirim?
<?xml version="1.0" encoding="iso-8859-9"?>
<ROOT>
<Stok AnaGrup_Kod="S03" AnaGrup_Ad="Sarf Urunler" AltGrup_Kod="S0310" AltGrup_Ad="CD DVD ler" Kod="bcdoem_0027" Ad="KODAK(1206-34-004577-27-12-06)50 LIK CD-R" Fiyat_Bayi="6.000000" Marka="oem" MarkaIsim="OEM" Miktar="    12" resim="segmentimagesprd/bcdoem_0027.jpg" note="Fiyatlar Dolar Satış Fiyatıdır ve KDV dahil değildir.">
        <STOKOZELLIKLER>
            <OZELLIKLER>
                <OZELLIK></OZELLIK>
                    <DEGER>50 lik pakerlerde</DEGER><OZELLIK></OZELLIK>
                    <DEGER>CD-R KAYIT OZELLİĞİ</DEGER>
            </OZELLIKLER>
        </STOKOZELLIKLER>
    </Stok>           
    <Stok AnaGrup_Kod="S03" AnaGrup_Ad="Sarf Urunler" AltGrup_Kod="S0310" AltGrup_Ad="CD DVD ler" Kod="bcdv_0005" Ad="VERSATILE 4,7 GB 120 DK. 16X 50 LI DVD-R" Fiyat_Bayi="0.400000" Marka="versatile" MarkaIsim="VERSATILE" Miktar="    29" resim="segmentimagesprd/bcdv_0005.jpg" note="Fiyatlar Dolar Satış Fiyatıdır ve KDV dahil değildir.">
    </Stok>           
    <Stok AnaGrup_Kod="S03" AnaGrup_Ad="Sarf Urunler" AltGrup_Kod="S0310" AltGrup_Ad="CD DVD ler" Kod="bcdv_0024" Ad="VERSATILE 4,7GB 120 DK.4X 10 LU  DVD+RW" Fiyat_Bayi="6.500000" Marka="versatile" MarkaIsim="VERSATILE" Miktar="    80" resim="segmentimagesprd/bcdv_0024.jpg" note="Fiyatlar Dolar Satış Fiyatıdır ve KDV dahil değildir.">
        <STOKOZELLIKLER>
            <OZELLIKLER>
                <OZELLIK></OZELLIK>
                    <DEGER>4,7 GB 120 dk</DEGER><OZELLIK></OZELLIK>
                    <DEGER>4x yazma</DEGER><OZELLIK></OZELLIK>
                    <DEGER>10 lu ozel kutusunda</DEGER><OZELLIK></OZELLIK>
                    <DEGER>DVD +RW</DEGER>
            </OZELLIKLER>
        </STOKOZELLIKLER>
    </Stok>   
</ROOT>

/o---------------------o\
     www.haser.com
\o---------------------o/

2

Re: Attribute-centric XML dosyasının açılması

yeterlimi bilemiyorum

Visual Fox Pro
TEXT TO m.lcXML NOSHOW TEXTMERGE

<?xml version="1.0" encoding="iso-8859-9"?>
<ROOT>
<Stok AnaGrup_Kod="S03" AnaGrup_Ad="Sarf Urunler" AltGrup_Kod="S0310" AltGrup_Ad="CD DVD ler" Kod="bcdoem_0027" Ad="KODAK(1206-34-004577-27-12-06)50 LIK CD-R" Fiyat_Bayi="6.000000" Marka="oem" MarkaIsim="OEM" Miktar="    12" resim="segmentimagesprd/bcdoem_0027.jpg" note="Fiyatlar Dolar Satış Fiyatıdır ve KDV dahil değildir.">
        <STOKOZELLIKLER>
            <OZELLIKLER>
                <OZELLIK></OZELLIK>
                    <DEGER>50 lik pakerlerde</DEGER><OZELLIK></OZELLIK>
                    <DEGER>CD-R KAYIT OZELLİĞİ</DEGER>
            </OZELLIKLER>
        </STOKOZELLIKLER>
    </Stok>
    <Stok AnaGrup_Kod="S03" AnaGrup_Ad="Sarf Urunler" AltGrup_Kod="S0310" AltGrup_Ad="CD DVD ler" Kod="bcdv_0005" Ad="VERSATILE 4,7 GB 120 DK. 16X 50 LI DVD-R" Fiyat_Bayi="0.400000" Marka="versatile" MarkaIsim="VERSATILE" Miktar="    29" resim="segmentimagesprd/bcdv_0005.jpg" note="Fiyatlar Dolar Satış Fiyatıdır ve KDV dahil değildir.">
    </Stok>
    <Stok AnaGrup_Kod="S03" AnaGrup_Ad="Sarf Urunler" AltGrup_Kod="S0310" AltGrup_Ad="CD DVD ler" Kod="bcdv_0024" Ad="VERSATILE 4,7GB 120 DK.4X 10 LU  DVD+RW" Fiyat_Bayi="6.500000" Marka="versatile" MarkaIsim="VERSATILE" Miktar="    80" resim="segmentimagesprd/bcdv_0024.jpg" note="Fiyatlar Dolar Satış Fiyatıdır ve KDV dahil değildir.">
        <STOKOZELLIKLER>
            <OZELLIKLER>
                <OZELLIK></OZELLIK>
                    <DEGER>4,7 GB 120 dk</DEGER><OZELLIK></OZELLIK>
                    <DEGER>4x yazma</DEGER><OZELLIK></OZELLIK>
                    <DEGER>10 lu ozel kutusunda</DEGER><OZELLIK></OZELLIK>
                    <DEGER>DVD +RW</DEGER>
            </OZELLIKLER>
        </STOKOZELLIKLER>
    </Stok>
</ROOT>
ENDTEXT
 
XMLTOCURSOR(m.lcXML,'tarkan')
brow

3

Re: Attribute-centric XML dosyasının açılması

Soykan,
Bu kod çalışmıyor.
Dikkat edersen sadece stokozelikler isimli bir sahadan oluşan tablo oluşuyor. Oysaki AnaGrup_Kod, AnaGrup_Ad, AltGrup_Kod, AltGrup_Ad, Kod vb sahalar var

/o---------------------o\
     www.haser.com
\o---------------------o/

4

Re: Attribute-centric XML dosyasının açılması

Selam Tarkan;

Verdiğin XML i kabaca inceledim ama formatı normalden çok farklı.

Anladığım kadarı ile STREXTRACT ve XMLTOCURSOR fonksiyonlarını beraber kullanman gerekiyor.

Aşağıdaki bir kaç linki buldum, ne kadar işini görür emin olamadım.

Bir incele istersen...

http://www.mofeel.net/110-microsoft-pub … /6487.aspx


Birde Çetin Üstad 'ın örneği var :
Burdaki XML formatı senin dataya göre çok daha okunaklı...

http://www.foxite.com/archives/convert- … 243045.htm

Kod aşağıda :

Visual Fox Pro
*Author: Cetin Basoz

TEXT TO yourXML noshow
<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>  <Donnees>
    <DonneesAsset>
        <Asset>RPF 052_V3</Asset>
        <Date Jour='8' Mois='4' Annee='2009' Heures='10' Minutes='11' Secondes='50'/>
        <Mesure>
            <Capteur>Report</Capteur>
            <Enrichie>Scheduled</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Customer Proximity</Capteur>
            <Enrichie>At 22,1 km South East from EBTS Hasselt</Enrichie>
            <Unite>km</Unite>
        </Mesure>
        <Mesure>
            <Capteur>Proximity Eurocities</Capteur>
            <Enrichie>At 17,4 km North West from Liege -- Belgium --</Enrichie>
            <Unite>km</Unite>
        </Mesure>
        <Mesure>
            <Capteur>Customer Zone</Capteur>
            <Enrichie>Maasmechelen Zone - St Truiden Zone - V3 Kiewit Zone</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Speed avg</Capteur>
            <Enrichie>42,1</Enrichie>
            <Unite>km/h</Unite>
        </Mesure>
        <Mesure>
            <Capteur>Movement GPS</Capteur>
            <Enrichie>Driving</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>City</Capteur>
            <Enrichie>Tongeren</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Code</Capteur>
            <Enrichie>3700</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Country</Capteur>
            <Enrichie>Belgium</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Position GPS</Capteur>
            <Enrichie>50.76619N 5.4713593E</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Speed</Capteur>
            <Enrichie>40</Enrichie>
            <Unite>km/h</Unite>
        </Mesure>
        <Mesure>
            <Capteur>Heading</Capteur>
            <Enrichie>NE</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Distance</Capteur>
            <Enrichie>13</Enrichie>
            <Unite>km</Unite>
        </Mesure>
        <Mesure>
            <Capteur>Distance timer</Capteur>
            <Enrichie>17</Enrichie>
            <Unite>min</Unite>
        </Mesure>
        <Mesure>
            <Capteur>Door</Capteur>
            <Enrichie>CLOSED</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Ignition</Capteur>
            <Enrichie>ON</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>Compressor</Capteur>
            <Enrichie>OFF</Enrichie>
        </Mesure>
        <Mesure>
            <Capteur>PWR Supply</Capteur>
            <Enrichie>EXTERNAL</Enrichie>
        </Mesure>
    </DonneesAsset>
</Donnees>
ENDTEXT
 
XMLTOCURSOR(STREXTRACT(m.yourXML,'<Donnees>','</Donnees>'),'yourCursor')
SELECT yourCursor
browse
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5 Son düzenleyen, cetinbasoz (05.05.2010 14:41:37)

Re: Attribute-centric XML dosyasının açılması

Tarkan,
Onu ayiklamak icin bildigim kadariyla XMLAdapter ya da DOM/SAX parser kullanman gerekiyor. ADO ile cok kolay ama olusan recordseti VFP'de cursor'a cewvirmek zahmetli.
Eger Ozellikler de attribute olsaydi daha kolaydi:

Visual Fox Pro
Close Databases All

Local lcXML
TEXT TO lcXML noshow
<?xml version="1.0" encoding="iso-8859-9"?>
<ROOT>
<Stok AnaGrup_Kod="S03" AltGrup_Kod="S0310" Kod="bcdoem_0027">
            <STOKOZELLIKLER>
            <OZELLIKLER OZELLIK="xx" DEGER="50 lik pakerlerde"/>
            <OZELLIKLER OZELLIK="yy" DEGER="CD-R KAYIT OZELLIGI"/>
            </STOKOZELLIKLER>
    </Stok>
  <Stok AnaGrup_Kod="S03" AltGrup_Kod="S0310" Kod="bcdv_0005">
   </Stok>
    <Stok AnaGrup_Kod="S03" AltGrup_Kod="S0310" Kod="bcdv_0024">
            <STOKOZELLIKLER>
            <OZELLIKLER OZELLIK="xx1" DEGER="50 lik pakerlerde"/>
            <OZELLIKLER OZELLIK="yy2" DEGER="CD-R KAYIT OZELLIGI"/>
            <OZELLIKLER OZELLIK="yy3" DEGER="Falan filan"/>
            <OZELLIKLER OZELLIK="yy4" DEGER=""/>
            </STOKOZELLIKLER>
    </Stok>
</ROOT>
ENDTEXT
Local loAdapter As Xmladapter, ;
  loHelper, ;
  t1 As Xmltable, t2 As Xmltable, t3 As Xmltable
loHelper = Createobject('XMLAdapterUtils')
 
loAdapter = Createobject('XMLAdapter')
loAdapter.LoadXML( m.lcXML )
 
t1 = loHelper.MakeTable("Stok")
t2 = loHelper.MakeTable("STOKOZELLIKLER")
t3 = loHelper.MakeTable("OZELLIKLER")
 
t1.ChildTable = m.t2
t2.ChildTable = m.t3
loAdapter.Tables.Add(m.t1, m.t1.XMLName)
 
loHelper.MakeField(m.t1, "@AnaGrup_Kod", "AnaGrup_Kod", "C",  3,0)
loHelper.MakeField(m.t1, "@AltGrup_Kod", "AltGrup_Kod", "C",  5,0)
loHelper.MakeField(m.t1, "@Kod",         "Kod",         "C", 40,0)
 
loHelper.MakeField(m.t3, "@OZELLIK","OZELLIK",     "C",100,0)
loHelper.MakeField(m.t3, "@DEGER","DEGER",       "C",100,0)
 
loAdapter.Tables(1).ToCursor()
 
Define Class XMLAdapterUtils As Custom
  Procedure MakeTable(tcTableName)
    Local loTable As Xmltable
    loTable=Createobject("XMLTable")
    loTable.XMLName = Strconv(m.tcTableName,5)
    loTable.Alias=m.tcTableName
    Return loTable
  Endproc
  Procedure MakeField(toTable,tcXMLName, tcFieldName,tcFieldType,tnFieldLen,tnDecimals)
    Local loField As Xmlfield
    loField=Createobject("XMLField")
    loField.XMLName=Strconv(m.tcXMLName,5)
    loField.Alias=Evl(m.tcFieldName,m.tcXMLName)
    loField.XMLNameIsXpath = .T.
    loField.DataType=m.tcFieldType
    loField.MaxLength=m.tnFieldLen
    If Evl(m.tnDecimals,0) > 0
      loField.FractionDigits = m.tnDecimals
    Endif
    toTable.Fields.Add(loField,loField.XMLName)
  Endproc
Enddefine

Not: .Net ile calismiyor musunuz? .Net ile uretilen XML'leri XMLAdapter taniyor. Attribute olmayinca neden olmuyor hic didiklemedim.

6

Re: Attribute-centric XML dosyasının açılması

Çetin,
Öncelikle teşekkür ederim.

.Net ile çalışıyoruz ancak bu kısmı VFP ile çözmemiz gerekiyordu. Bizim düşüncemiz en sonra .Net ile bir EXE yapıp oradan bu işi çözmekti.
Tekrar ellerine sağlık.

/o---------------------o\
     www.haser.com
\o---------------------o/

7

Re: Attribute-centric XML dosyasının açılması

Bu kismi VFP cozer, demek istedigim neden .Net'de dataset WriteXml ya da daha guzeli Linq XElement filan kullanmiyorsunuz. .Net dataset XML'leri VFP dogrudan okuyor.

8

Re: Attribute-centric XML dosyasının açılması

Bu XML dosyası bizim oluşturduğumuz bir şey değil. Bu bir başka firmanın web servisinden geliyor. Bizim masaüstü yazılımımız hala VFP.
Web servisten bilgiyi alıp kullanıcıya sunmamız gerektiği için VFP'de nasıl yaparız diye sormuştum. Bu web servisinden aldığımız XML dosyasını .Net ile rahatlıkla açıyoruz.

/o---------------------o\
     www.haser.com
\o---------------------o/