🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages Started by Paweł Sun, 09 Sep 2012 09:01
Jak parsować dokument xml zapisany w xmlu?
#22433
Author: Paweł
Date: Sun, 09 Sep 2012 09:01
20 lines
1590 bytes
Witam
Chciałbym poprosić o małą podpowiedź jak można parsować w C# dokument xml, 
który posiada wiele dokumentów xml (tyle ile rekordów w tabeli bazy danych) 
zapisanych w postaci tekstowej (utf-8) tzn. znaczki tagów są w postaci 
<>

<Element_glowny>
    <Rekord_z_tabeli>
            <rekord_xml>&lt;?xml version=&quot;1.0&quot;?&gt; 
&lt;tag1&quot;&gt;&lt; itd, dosyc rozbudowana struktura
            </rekord_xml>
    </Rekord_z_tabeli>
    <Rekord_z_tabeli>
            itd. ...

</Element_glowny>

Chodzi o wydobycie danych zapisanych jako tekst.
Z góry dziękuję za pomoc i pozdrawiam Paweł
 
Re: Jak parsować dokument xml zapisany w xmlu?
#22434
Author: Łukasz 'Maly' Ostrowski
Date: Sun, 09 Sep 2012 10:15
18 lines
1711 bytes
On Sun, 9 Sep 2012 11:01:49 +0200, Paweł wrote:

> Witam
> Chciałbym poprosić o małą podpowiedź jak można parsować w C# dokument xml, 
> który posiada wiele dokumentów xml (tyle ile rekordów w tabeli bazy danych) 
> zapisanych w postaci tekstowej (utf-8) tzn. znaczki tagów są w postaci 
> &lt;&gt;
> <snip>
> Chodzi o wydobycie danych zapisanych jako tekst.
> Z góry dziękuję za pomoc i pozdrawiam Paweł

To może być niespodziewane ale:
http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx
;-).

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.pl/
Re: Jak parsować dokument xml zapisany w xmlu?
#22435
Author: Paweł
Date: Sun, 09 Sep 2012 13:59
51 lines
3031 bytes
Użytkownik "Łukasz 'Maly' Ostrowski" <l3vi4than@USUNgmail.com> napisał w 
wiadomości news:flur8qj0574w$.vewro493o4xg$.dlg@40tude.net...
> On Sun, 9 Sep 2012 11:01:49 +0200, Paweł wrote:
>
>> Witam
>> Chciałbym poprosić o małą podpowiedź jak można parsować w C# dokument 
>> xml,
>> który posiada wiele dokumentów xml (tyle ile rekordów w tabeli bazy 
>> danych)
>> zapisanych w postaci tekstowej (utf-8) tzn. znaczki tagów są w postaci
>> &lt;&gt;
>> <snip>
>> Chodzi o wydobycie danych zapisanych jako tekst.
>> Z góry dziękuję za pomoc i pozdrawiam Paweł
>
> To może być niespodziewane ale:
> http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx
> ;-).
>
> -- 
> Pozdrawiam,
> Łukasz 'Maly' Ostrowski.      http://l3v.pl/

Pierwszy z brzegu kod wykrzacza się na polskich znakach i zonk ;-(

public static void Main(string[] args)
  {
   // Create an XmlUrlResolver with default credentials.
        XmlUrlResolver resolver = new XmlUrlResolver();
        resolver.Credentials = 
System.Net.CredentialCache.DefaultCredentials;

        // Point the resolver at the desired resource and resolve as a 
stream.
        Uri baseUri = new Uri("C://tmp//xml//");
        //Uri fulluri = resolver.ResolveUri(baseUri, "Tab_XR_to_XML.xml");
        Uri fulluri = resolver.ResolveUri(baseUri, "rekordy.xml");
        Stream s = (Stream)resolver.GetEntity(fulluri, null, 
typeof(Stream));

        // Create the reader with the resolved stream and display the data.
        XmlReader reader = XmlReader.Create(s);
        while (reader.Read())
        {
            Console.WriteLine(reader.ReadOuterXml());
        }

   Console.Write("Press any key to continue . . . ");
   Console.ReadKey(true);
  } 
Re: Jak parsować dokument xml zapisany w xmlu?
#22436
Author: Łukasz 'Maly' Ostrowski
Date: Sun, 09 Sep 2012 16:50
13 lines
1435 bytes
On Sun, 9 Sep 2012 15:59:17 +0200, Paweł wrote:
> Pierwszy z brzegu kod wykrzacza się na polskich znakach i zonk ;-(
> <snip>

Po co te kombinacje z resolverem?

Uploadnij gdzieś tego xmla, w sensie na tyle obciętego żeby wywalał
się XmlReader/XmlDocument, to zajrzę o co chodzi, bo tak trudno
zgadnąć.

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.pl/
Re: Jak parsować dokument xml zapisany w xmlu?
#22437
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 11 Sep 2012 08:12
41 lines
2447 bytes
Hello Pawel,
Sunday, September 9, 2012, 10:56:37 PM, you wrote:
> W załączniku przesyłam fragment xmla z bazy danych, niby prosty ale 
> skomplikowany zarazem.
> Czy da się coś z nim zrobić aby wyciągnąć dane (wykorzystać klasy dostępne w
> Net czy też trzeba wszystko rzeźbić ręcznie) ?

/Corruptnięty plik dostałem na maila, postuję rozwiązanie dla
 potomnych ;-)/

Generalnie problem polega na znaku 0x8C, który jest nielegalny w tym
encodingu i to czyni ten xml ill-formed. Jest to znak:
http://en.wikipedia.org/wiki/Œ

"In HTML, the HTML character entity references &OElig; and &oelig;
can also be used. In Windows-1252, at positions 0x8C and 0x9C."

Jeżeli jest on istotny to wystarczy go podmienić legalnym-xml-entity
i załadować do XmlDocument. Jeżeli jest nieistotny to wystarczy go
wyciąć.

Przykładowy strip z wycięciem:

var xml = File.ReadAllText("tab_xml.xml");

xml = xml.Replace("\x8c", "&oelig;");

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml); // *** ladujemy "spatchowany" dokument główny

var elements = doc.GetElementsByTagName("XML");
foreach (XmlElement elem in elements)
{
    XmlDocument innerDoc = new XmlDocument();
    innerDoc.LoadXml(elem.InnerText); // *** tutaj masz 
                                      // dokumenty "zagnieżdzone"
}

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.pl/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads