Bilinmeyen Yapıda xml dosyası ayırma işlemleri
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Bilinmeyen Yapıda xml dosyası ayırma işlemleri
Merhaba arkadaşlar. Benim yapmaya calıstıgım herkesin burada sundugunun aksine bilinmeyen yapıdaki bir xml dosyasını açıp onun butun node larını okuyup bu node ların içinde var olan items isimleri ve değerlerini okumak ve tabii diğer bir yapıda var olan attribute değerleri içinde bilgi gönderilen dosylardaki attribute isimlerin ve attribute değerlerini de alabilmek idi. Yeni başladıgım xml okuma çalısmalarında hali hazırda 4. kademeye kadar alt node ları okuyup içerisinde bulunan items ve değerlerini ayırabiliyorum(Tabi henüz acemice yazılmıs bir code ile) ama attribute lerin attribute isimlerini bilmeden değerlerini okuma imkani olmadığı gibi attribute isimlerini de nasıl alabileceğim konusunda bir çıkış bulamadım. TXMLdocument bileşeni ile bunu yapmak mümkünmü? ve yapısı bilinmeyen dosyalarıda parse edecek ve içindeki herşeyi documente edecek code örnekleri varmı? İlgilenecek tüm arkadaşlara simdiden tesekkür ederim.
Re: Bilinmeyen Yapıda xml dosyası ayırma işlemleri
Merhaba,
Bildiğim kadarıyla IXMLDocument ile bunu yapamazsınız. Ancak IXMLDOMDocument ile bunu yapmanız mümkün olabilir.
Örnek olması açısından aşağıdaki kodu inceleyebilirsiniz.
Bildiğim kadarıyla IXMLDocument ile bunu yapamazsınız. Ancak IXMLDOMDocument ile bunu yapmanız mümkün olabilir.
Örnek olması açısından aşağıdaki kodu inceleyebilirsiniz.
Kod: Tümünü seç
uses
msxml;
const
TestXML = '<?xml version="1.0" encoding="utf-8" ?>' +
'<items><item Id="814135481" Rank="1">' +
'<a n="Formatted Name" v="Test Project 1"/></item>' +
'<item Id="814135882" Rank="2">' +
'<a n="Formatted Name" v="Test Project 2"/>' + '</item>' +
'<item Id="814135908" Rank="3">' +
'<a n="Formatted Name" v="Test Project 3"/>' +
'</item></items>';
procedure TForm2.FormCreate(Sender: TObject);
var
Xml: IXMLDOMDocument;
ANode: IXMLDOMNode;
I: Integer;
begin
Memo1.Clear();
Memo1.WordWrap := False;
Memo1.Font.Name := 'Consolas';
Memo1.ScrollBars := TScrollStyle.ssBoth;
Xml := CoDOMDocument.Create();
Xml.LoadXml(TestXML);
ANode := Xml.documentElement.childNodes[0];
Memo1.Lines.Add('NodeName: ' + ANode.nodeName + ', NodeValue: ' + VarToStr(ANode.nodeValue));
for I := 0 to ANode.attributes.length-1 do
Memo1.Lines.Add(' AttributeName: ' + ANode.attributes.item[I].nodeName + ', AttributeValue: ' + VarToStr(ANode.attributes.item[I].nodeValue));
end;
Re: Bilinmeyen Yapıda xml dosyası ayırma işlemleri
Cevabınız için tesekkur ederim
Gercekten faydalı ama hala bir sorun daha var bu kod ile sizin ornek xml guzel okunabilir ama benim calsıtıgım yapıda sadece ilk nodu alıyor sonraki nodları almak için bir cok kod denemesi yaptım caşitli dongulere soktum ama nafile olmadı sanırım bir ornek xml versem daha anlamlı olacak sorum
Gercekten faydalı ama hala bir sorun daha var bu kod ile sizin ornek xml guzel okunabilir ama benim calsıtıgım yapıda sadece ilk nodu alıyor sonraki nodları almak için bir cok kod denemesi yaptım caşitli dongulere soktum ama nafile olmadı sanırım bir ornek xml versem daha anlamlı olacak sorum
Kod: Tümünü seç
<?xml version="1.0" encoding="UTF-8" ?><systems messageName="deviceResponse" messageID="39" xmlns="http://www.w3.org/2001/XMLSchema-instance">
<deviceResponse result="OK">
<device deviceIndex="1" deviceName="YYYYYYYYYYY" deviceParameterType="DeviceParameter">
<supportedInterfaceModes>
<interfaceMode mode="prn"/>
</supportedInterfaceModes>
<DeviceParameter supportsColor="none">
<ipAndPort ip="10.34.248.11" port="17540" hostName="xxxxxxxxx"/>
<pStatus desc="initializing..." init="true" paperOut="false" powerOff="false" ready="false" unknown="false" paperJam="false"/>
<supportedStocks>
<supportedStock supportsColor="none" stockWidth="203" stockHeight="76" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" perforationLeft="0"/>
</supportedStocks>
</DeviceParameter>
</device>
</deviceResponse>
</systems>
Re: Bilinmeyen Yapıda xml dosyası ayırma işlemleri
Merhaba
Aslında bu xml ler için normalde xsd dosdyaları da mevcut ve diğer diller ile (Java gibi) bu konuda yazılan programlarda xsd ile validasyon da yapılmakta ama ben delphi ile xml ve xsd konusuna malesef cok bilgisizim, neler yapılabileceği hakkında dahi yeterli bilgiye ulaşamadım. Compilerin dökümantasyonunda da yeterli bilgi bulamayınca hüsrana ugramıstım. Eğer zaman ayırıp yardımcı olabilecek arkadaşlar varsa simdiden tesekkür ederim. Konuya örnek olabilecek Xml bir önceki mesajda mevcut.
Aslında bu xml ler için normalde xsd dosdyaları da mevcut ve diğer diller ile (Java gibi) bu konuda yazılan programlarda xsd ile validasyon da yapılmakta ama ben delphi ile xml ve xsd konusuna malesef cok bilgisizim, neler yapılabileceği hakkında dahi yeterli bilgiye ulaşamadım. Compilerin dökümantasyonunda da yeterli bilgi bulamayınca hüsrana ugramıstım. Eğer zaman ayırıp yardımcı olabilecek arkadaşlar varsa simdiden tesekkür ederim. Konuya örnek olabilecek Xml bir önceki mesajda mevcut.
Re: Bilinmeyen Yapıda xml dosyası ayırma işlemleri
Delphi IDE'si ile gelen XML Data Binding (http://docwiki.embarcadero.com/RADStudi ... ing_Wizard) aracini kullanarak siniflarin olusturulmasini saglayabilirsiniz. Siniflar uzerinden calismak daha kolay olacaktir. Eger elinizde sema yoksa yine de IXMLDocument sinifi ile xmllei okuyabilir ya da olusturabilirsiniz. Surada (https://github.com/isisedonusum) e-fatura xmlleri icin yapilmis bazi ornekler mevcut. Delphi yillar icinde xml islemek icin farkli kutuphaneler kullandi, bu nedenle bulacaginiz ornekler sizin versiyonunuzda calismayabilir.