Како читати КСМЛ у Ц#

Kako Citati Ksml U C



Формат података који се широко користи за дељење података на Интернету је КСМЛ, пошто се подаци у њему могу чувати и размењивати између система на флексибилан начин који је једноставан за коришћење. У Ц#, читање КСМЛ датотека је уобичајен задатак, а .НЕТ фрамеворк пружа различите класе и методе за рашчлањивање и читање КСМЛ датотека. Овај пост ће говорити о коришћењу .НЕТ фрамеворк-а за читање КСМЛ-а у Ц#.

Читање КСМЛ-а у Ц#

Постоји неколико начина за читање КСМЛ датотеке у Ц#-у и сваки метод има своје предности и мане, а избор зависи од захтева пројекта. Испод су неки начини за читање КСМЛ датотеке у Ц#:

Ево садржаја КСМЛ датотеке коју сам направио и која ће се користити за демонстрацију у новим методама:







< ?кмл верзија = '1.0' кодирање = 'утф-8' ? >
< запослених >
< запослени >
< ид > 1 ид >
< име > Сам босх име >
< одељење > Маркетинг одељење >
< плата > 50000 плата >
запослени >
< запослени >
< ид > 2 ид >
< име > Јане Дое име >
< одељење > финансије одељење >
< плата > 60000 плата >
запослени >
< запослени >
< ид > 3 ид >
< име > Џејмс име >
< одељење > Људски ресурси одељење >
< плата > 70000 плата >
запослени >
запослених >

1: Коришћење КсмлДоцумент-а

Да бисте прочитали КСМЛ датотеку у Ц#, можете користити класу КсмлДоцумент или класу КСДоцумент, а обе су део именског простора Систем.Ксмл. Класа КсмлДоцумент обезбеђује ДОМ (Доцумент Објецт Модел) приступ за читање КСМЛ-а, док класа КСДоцумент обезбеђује ЛИНК (Лангуаге-Интегратед Куери) приступ. Ево примера коришћења класе КсмлДоцумент за читање КСМЛ датотеке:



коришћење система;
усинг Систем.Ксмл;

разред Програм
{
статичка празнина Главна ( низ [ ] аргс )
{
КсмлДоцумент доц = нови КсмлДоцумент ( ) ;
доц.Лоад ( 'емплоиеес.кмл' ) ;

Чворови КсмлНодеЛист = доц.ДоцументЕлемент.СелецтНодес ( '/запослени/запослени' ) ;

за сваки ( КсмлНоде чвор ин чворови )
{
низ ид = ноде.СелецтСинглеНоде ( 'ид' ) .ИннерТект;
стринг наме = ноде.СелецтСинглеНоде ( 'име' ) .ИннерТект;
стринг департмент = ноде.СелецтСинглеНоде ( 'одељење' ) .ИннерТект;
стринг салари = ноде.СелецтСинглеНоде ( 'плата' ) .ИннерТект;
Цонсоле.ВритеЛине ( „ИД: {0}, Име: {1}, Одељење: {2}, Плата: {3}“ , ид , име, одељење, плата ) ;
}
}
}

Овај код користи класу КсмлДоцумент за учитавање КСМЛ датотеке и метод СелецтНодес за преузимање листе чворова запослених. Затим, за сваки чвор запосленог, користи метод СелецтСинглеНоде да преузме вредности подређених чворова ид, име, одељење и плате и приказује их помоћу Цонсоле.ВритеЛине:







2: Коришћење КСДоцумент-а

Алтернативно, такође можете користити класу КСДоцумент за читање КСМЛ датотеке користећи ЛИНК приступ, а испод је код који илуструје како то да урадите:

коришћење система;

разред Програм
{
статичка празнина Главна ( низ [ ] аргс )
{
КСДоцумент доц = КСДоцумент.Лоад ( 'емплоиеес.кмл' ) ;

за сваки ( КСЕлемент елемент ин док.Потомци ( 'запослени' ) )
{
инт ид = инт.Парсе ( елемент.Елемент ( 'ид' ) .Валуе ) ;
стринг наме = елемент.Елемент ( 'име' ) .Валуе;
стринг департмент = елемент.Елемент ( 'одељење' ) .Валуе;
инт плата = инт.Парсе ( елемент.Елемент ( 'плата' ) .Валуе ) ;
Цонсоле.ВритеЛине ( $ „ИД: {ид}, име: {наме}, одељење: {департман}, плата: {плата}“ ) ;
}
}
}

КСМЛ датотека се учитава у КСДоцумент објекат помоћу методе КСДоцумент.Лоад. Елементи „запослени“ КСМЛ датотеке се тада преузимају помоћу технике Десцендантс. За сваки елемент, његовим подређеним елементима се приступа помоћу методе Елемент, а њихове вредности се издвајају помоћу својства Валуе. Коначно, екстраховани подаци се штампају на конзоли.



Имајте на уму да КСДоцумент припада именском простору Систем.Ксмл.Линк, тако да морате да укључите следећу изјаву користећи на врху ваше Ц# датотеке

3: Коришћење КсмлРеадер-а

КсмлРеадер је брз и ефикасан начин за читање КСМЛ датотеке у Ц#. Чита датотеку секвенцијално, што значи да учитава само један по један чвор, што га чини идеалним за рад са великим КСМЛ датотекама којима би иначе било тешко руковати у меморији.

коришћење система;
усинг Систем.Ксмл;

разред Програм
{
статичка празнина Главна ( низ [ ] аргс )
{
Користећи ( Читач КсмлРеадер = КсмлРеадер.Цреате ( 'емплоиеес.кмл' ) )
{
док ( читач.Прочитај ( ) )
{
ако ( реадер.НодеТипе == КсмлНодеТипе.Елемент && читач.Име == 'запослени' )
{
Цонсоле.ВритеЛине ( 'ИД: ' + реадер.ГетАттрибуте ( 'ид' ) ) ;
реадер.РеадТоДесцендант ( 'име' ) ;
Цонсоле.ВритеЛине ( 'Име: ' + реадер.РеадЕлементЦонтентАсСтринг ( ) ) ;
реадер.РеадТоНектСиблинг ( 'одељење' ) ;
Цонсоле.ВритеЛине ( 'Одељење:' + реадер.РеадЕлементЦонтентАсСтринг ( ) ) ;
реадер.РеадТоНектСиблинг ( 'плата' ) ;
Цонсоле.ВритеЛине ( 'Плата: ' + реадер.РеадЕлементЦонтентАсСтринг ( ) ) ;
}
}
}
}
}

У овом примеру користимо КсмлРеадер.Цреате метод да креирамо инстанцу КсмлРеадер-а и проследимо путању КСМЛ датотеке као параметар. Затим користимо вхиле петљу да читамо кроз КСМЛ датотеку чвор по чвор користећи Реад методу КсмлРеадер-а.

Унутар петље прво проверавамо да ли је тренутни чвор елемент запосленог користећи својства НодеТипе и Наме КсмлРеадер-а. Ако је тако, користимо метод ГетАттрибуте да бисмо преузели вредност атрибута ид.

Затим користимо метод РеадТоДесцендант да померимо читач на елемент наме унутар елемента запосленог. Вредност елемента наме се затим добија коришћењем функције РеадЕлементЦонтентАсСтринг.

Слично томе, користимо метод РеадТоНектСиблинг да померимо читач на следећи братски елемент и добијемо вредност елемената одељења и плате.

Коначно, користимо усинг блоцк да бисмо осигурали да се КсмлРеадер објекат правилно одложи након што завршимо са читањем КСМЛ датотеке:

4: КСМЛ у ЛИНК

Читање КСМЛ датотеке помоћу ЛИНК то КСМЛ у Ц# је моћан начин за приступ и манипулацију КСМЛ подацима. ЛИНК то КСМЛ је компонента ЛИНК технологије која обезбеђује једноставан и ефикасан АПИ за рад са КСМЛ подацима.

коришћење система;
усинг Систем.Линк;
користећи Систем.Ксмл.Линк;

разред Програм
{
статичка празнина Главна ( низ [ ] аргс )
{
КСДоцумент доц = КСДоцумент.Лоад ( 'емплоиеес.кмл' ) ;

вар запослени = од е ин док.Потомци ( 'запослени' )
изаберите Нова
{
Ид = е.Елемент ( 'ид' ) .Валуе,
Назив = е.Елемент ( 'име' ) .Валуе,
Одељење = е.Елемент ( 'одељење' ) .Валуе,
Плата = е.Елемент ( 'плата' ) .Валуе
} ;
за сваки ( вар запослен ин запослених )
{
Цонсоле.ВритеЛине ( $ „Ид: {емплоиее.Ид}, Име: {емплоиее.Наме}, Одељење: {емплоиее.Департмент}, Плата: {емплоиее.Салари}“ ) ;
}
}
}

У овом коду прво учитавамо КСМЛ датотеку помоћу методе КСДоцумент.Лоад(). Затим користимо ЛИНК то КСМЛ да поставимо упит за КСМЛ податке и изаберемо елементе ИД-а, имена, одељења и плате за сваки елемент запосленог. Чувамо ове податке у анонимном типу, а затим прегледамо резултате да бисмо одштампали информације о запосленима на конзоли.

5: Коришћење КСПатх-а

КСПатх је језик упита који се користи за навигацију кроз КСМЛ документ за лоцирање одређених елемената, атрибута и чворова. То је ефикасан алат за претраживање и филтрирање информација у КСМЛ документу. У Ц#, можемо користити КСПатх језик за читање и издвајање података из КСМЛ датотека.

коришћење система;
усинг Систем.Ксмл.КСПатх;
усинг Систем.Ксмл;

разред Програм
{
статичка празнина Главна ( низ [ ] аргс )
{
КсмлДоцумент доц = нови КсмлДоцумент ( ) ;
доц.Лоад ( 'емплоиеес.кмл' ) ;

// Креирајте КСПатхНавигатор из документа
КСПатхНавигатор нав = доц.ЦреатеНавигатор ( ) ;

// Саставите КСПатх израз
КСПатхЕкпрессион експр = нав.Цомпиле ( '/запослени/запослени/име' ) ;

// Процените израз и поновите низ резултата
КСПатхНодеИтератор итератор = нав.Селецт ( експр ) ;
док ( итератор.МовеНект ( ) )
{
Цонсоле.ВритеЛине ( итератор.Цуррент.Валуе ) ;
}
}
}

Овај код учитава датотеку “емплоиеес.кмл” користећи КсмлДоцумент, креира КСПатхНавигатор из документа и компајлира КСПатх израз да би изабрао све елементе <наме> испод елемената <емплоиее>. Затим процењује израз и понавља резултате, штампајући вредност сваког елемента <наме>.

Белешка: Коришћење КСПатх-а може бити моћан и флексибилан начин за одабир елемената и атрибута из КСМЛ документа, али такође може бити сложенији од неких других метода о којима смо разговарали.

Закључак

Коришћење класе КсмлДоцумент пружа пуне могућности манипулације ДОМ-ом, али може бити спорије и захтева више меморије од других метода. Класа КсмлРеадер је добра опција за читање великих КСМЛ датотека, јер пружа брз приступ заснован на стриму који није кеширан само за прослеђивање. Класа КСДоцумент пружа једноставнију и сажетију синтаксу, али можда неће бити тако учинковита као КсмлРеадер. Поред тога, методе ЛИНК то КСМЛ и КСПатх пружају моћне могућности упита за издвајање специфичних података из КСМЛ датотеке.