Search code examples
c#xml

Reading a XML in C#


I have an XML file with this structure:

<?xml version='1.0'?>
<game>
    <Object type='GL' name='game' params=''>
        <Property name='ScriptInterface' value='' />
        <Property name='script' value='2F2F2056616D6F732061206465636C61726172207661726961626C65732071756520736572E16E20616363657369626C6573206465736465206375616C717569657261206465206C6F73206974656D730D0A2F2F2064656C206A7565676F2E0D0A2F2F20456E2065737465206361736F2C20766F79206120646566696E69722061206D616E6F2C20656C207469706F20646520537072697465732071756520706F6472656D6F7320656E636F6E747261720D0A2F2F20656E20656C206A7565676F2C206573746F2065732C20656E656D69676F732C206974656D732C20706C617965722C206469737061726F732E2E2E206375616C717569657261206465206C6F7320737072697465730D0A2F2F20717565206C7565676F20707565646520636F6C6973696F6E617220636F6E206F74726F2E0D0A0D0A0D0A2F2F205573616D6F73206C612070616C616272612072657365727661646120676C6F62616C733A207061726120696E646963617220717565206573746173207661726961626C657320736F6E20474C4F42414C45530D0A2F2F207920736520706F6472E12061636365646572206120737520636F6E74656E69646F206465736465206375616C7175696572206F74726F206F626A65746F20717565206465636C6172656D6F732E0D0A676C6F62616C733A0D0A0D0A09504C41594552203D20323B09090909092F2F20456C205370726974652071756520726570726573656E746120616C206A756761646F722E0909090D0A09454E454D59203D20343B09090909092F2F20456C207370726974652071756520726570726573656E74612061206C6F7320656E656D6F69676F732E0D0A0953484F4F545F504C41594552203D20383B0920202F2F20456C207370726974652064656C206469737061726F2064656C206A756761646F722E0D0A0953484F4F545F454E454D59203D2031363B09202F2F20456C207370726974652064656C206469737061726F20656E656D69676F2E0D0A09' encode='hex' />
        <Property name='resx' value='1024.0' />
        <Property name='resy' value='768.0' />
        <Property name='mainstage' value='stage1' />
        <Property name='bgcolor' value='0' />
        <Property name='globalkeys' value='' />
        <Property name='scriptFolder' value='' />
        <Property name='behaviourslibraryversion' value='0' />
        <Property name='behaviourslibrarypath' value='' />
        <Property name='behaviourslibraryscript' value='' encode='hex' />
        <Property name='behaviourClassNamespace' value='com_dev_game' />
        <Property name='developer' value='' />
    </Object>
    <Object type='GL_Sprite' name='Player_Shoot' params='[]' creator='stage1'>
    <Property name='ScriptInterface' value='' />
    <Property name='script' value='2F2F204465636C6172616D6F73206C6173207661726961626C6573207175652076616D6F732061207573617220656E20657374652073707269746520792071756520736F6C6F206C6520617461F1656E206120E96C2E0D0A70726F706572746965733A0D0A0D0A09706F73783D303B090909092F2F20506F73696369F36E207820717565207469656E6520656C207370726974652C20656E207072696E636970696F20300D0A09706F73793D303B090909092F2F20506F73696369F36E207920717565207469656E6520656C207370726974652C2074616D6269E96E203020706F722061686F72612E0D0A094C696D6974593D2D32303B09092020202F2F204CED6D69746520656E20656C20656A6520766572746963616C2C20616C20736572206E6567617469766F2C206675657261206465206C612070616E74616C6C6120706F72206C61207061727465207375706572696F722C20646F6E646520616C206C6C656761722C20656C2073707269746520736572E12064657374727569646F2E0D0A0D0A0D0A2F2F204C612066756E6369F36E2053544152542065732C20656E206573746520656A656D706C6F2C206C61207072696D6572612066756E6369F36E2071756520736520656A656375746120616C20637265617220756E205370726974652E20417175ED20646562656D6F732022636F6E6669677572617222206C61732070726F7069656461646573207175652074656E6472E1206E75657374726F207370726974652E0D0A2F2F20706F7220656A656D706C6F2C207375207469706F2C207369207469656E6520756E20636F6E74726F6C61646F722C207369206675657365206E656365736172696F2C20656C206EFA6D65726F2064652076696461732E2E2E2E0D0A2F2F205365206C6C616D6120636F6E206C612070616C6162726120726573657276616461205649525455414C20706F7220717565206C6F2071756520686163656D6F73206573202261F16164697222206E75657374726F2063F36469676F20616C2066696E616C2064656C206DE9746F646F20535441525420717565207469656E656E20746F646F73206C6F7320474C5F5350524954452C207175652065730D0A2F2F20656C206F626A65746F2070616472652064656C207175652070617274652063616461207370726974652E0D0A2F2F2053692064657365616D6F73206465636C6172617220657374612066756E6369F36E20636F6D6F2046756E6374696F6E2C2074616D6269E96E20736520706F6472ED612068616365722C207065726F20616C2066696E616C206465206C61206D69736D612C2074656E6472ED616D6F73207175652061F16164697220756E61206C6C616D6164612061206C612066756E6369F36E2053746172742064656C2070616472652028474C5F5350495445290D0A2F2F2065736F20736520686163652061F1616469656E746F203A3A537461727428293B20616C2066696E616C206465206C612066756E6369F36E2E0D0A0D0A7669727475616C20537461727428290D0A7B0D0A0973656C662E536574547970652853484F4F545F504C41594552293B0909092F2F2056616D6F732061206573706563696669636172207175652065737465207370726974652C20657320756E206469737061726F2064656C20706C617965720D0A0973656C662E437265617465496E7374616E636573506F6F6C283130293B0909092F2F2056616D6F73206120637265617220313020696E7374E16E636961732C20636F6D6F20636F706961732C2071756520706F6472E16E2065737461722076697369626C657320656E2070616E74616C6C6120616C206D69736D6F207469656D706F2E0D0A7D0D0A0D0A2F2F205061726120706F646572206573706563696669636172206C617320636F6F7264656E6164617320646F6E6465206E61636572E120656C206469737061726F2C20637265616D6F7320756E612066756E6369F36E2061206C6120717565206C652076616D6F73206120706173617220646F7320706172E16D6574726F732C207820706F73696369F36E20656E20656C20656A6520686F72697A6F6E74616C20646F6E6465206573746172E10D0A2F2F20656C20737072697465206520792C20706F73696369F36E20656E20656C20656A6520766572746963616C20646F6E6465206573746172E120656C207370726974652E0D0A2F2F204573746F73206461746F732C20656E206573746520656A656D706C6F2C2073652065737461626C6563656E20646573646520656C20504C41594552207920736F6E206C617320636F6F7264656E61646173206465206C61206E6176652071756520646973706172612E0D0A2F2F204C61732066756E63696F6E657320717565206E6F736F74726F7320637265656D6F732C207365206465636C6172616E20636F6D6F2046554E4354494F4E2E0D0A0D0A66756E6374696F6E20536574506F736974696F6E28782C2079290D0A7B0D0A0973656C662E736574506F7328782C2079293B0909090909092F2F2045737461626C6563656D6F73206C6120706F73696369F36E207175652074656E6472E120656C2073707269746520656E20626173652061206C617320636F6F7264656E6164617320717565206C652068656D6F732070617361646F2E0D0A0973656C662E4D6F7665546F28782C204C696D6974592C202E3031293B0920202F2F2056616D6F73206120637265617220756E20636F6E74726F6C61646F72206175746F6DE17469636F2C20756E6120727574612C207175652065737461626C65636520756E6120636F6F7264656E6164612064652064657374696E6F2C207920717565207365206D6F766572E1206120756E612076656C6F636964616420646520302E30310D0A7D0D0A0D0A2F2F2056616D6F73206120696E74657263657074617220656C206DE9746F646F204D6F766528292064656C207370726974652C20706172612C20656E2065737465206361736F2C20636F6E74726F6C617220737520706F73696369F36E2064652070616E74616C6C61207920646573747275697220656C20737072697465207369206C6C6567612061207375206CED6D6974652E0D0A2F2F20536572ED61206D7563686F206D656A6F72206861636572206573746F207574696C697A616E646F20756E61206DE17175696E6120646520657374E1646F732C207065726F20706F722073696D706C6966696361722C20706F722061686F72612C206C6F2076616D6F73206120686163657220656E20656C204D6F766528292E0D0A0D0A7669727475616C204D6F766528290D0A7B0D0A092F2F205369206C6120706F73696369F36E20717565207469656E652061686F726120656C20737072697465206573206D656E6F72206F20696775616C20616C204C696D69745920282D32302920646573747275696D6F7320656C206469737061726F2C20657374E12066756572612064652070616E74616C6C612E0D0A0969662873656C662E476574592829203C3D204C696D697459290D0A097B0D0A090973656C662E44657374726F7928293B09092F2F204469737061726F20656C696D696E61646F2E204573746F2064656A61206F7472612076657A2C20737520687565636F20656E206C6120706F6F6C20646520696E7374E16E63696173206C696272652E0D0A097D0D0A090D0A092F2F2045786973746520756E6120666F726D61206DE173202270726F666573696F6E616C22206465206861636572206573746F2071756520736572ED6120636F6E206C612066756E6369F36E206973436C69707065642829207175652064657675656C7665207472756520736920657374E120656E2070616E74616C6C6120792066616C7365207369206E6F20657374E120656E2070616E74616C6C612E0D0A092F2F20456E206573746520656A656D706C6F2C20646172ED6120696775616C206C6120706F73696369F36E2064656C207370726974652C20736920657374E12066756572612064652070616E74616C6C612C20736520656C696D696E612E20416C676F206173ED3A0D0A092F2A0D0A096966282073656C662E6973436C697070656428293D3D2066616C7365290D0A097B0D0A090973656C662E44657374726F7928293B0D0A097D0D0A092A2F0D0A090D0A7D0D0A0D0A' encode='hex' />
    <Property name='type' value='0' />
    <Property name='visible' value='true' />
    <Property name='stop' value='false' />
    <Property name='collision' value='false' />
    <Property name='x' value='-64.0' />
    <Property name='y' value='-64.0' />
    <Property name='width' value='16.0' />
    <Property name='height' value='30.0' />
    <Property name='drawflags' value='0' />
    <Property name='flags' value='0' />
    <Property name='angle' value='0.0' />
    <Property name='priority' value='0.0' />
    <Property name='scalex' value='1.0' />
    <Property name='scaley' value='1.0' />
    <Property name='curanimation' value='normal' />
    <Property name='color' value='-1' />
    <Property name='clipping' value='true' />
    <Property name='hflip' value='0' />
    <Property name='vflip' value='0' />
    <Property name='physics' value='false' />
    <Property name='physicsBody' value='static' />
    <Property name='physicsFixedRotation' value='false' />
    <Property name='physicsMass' value='100.0' />
    <Property name='physicsDensity' value='1.0' />
    <Property name='physicsRestitution' value='0.5' />
    <Property name='physicsFriction' value='0.5' />
    <Property name='physicsGravityScale' value='1.0' />
    <Property name='physicsAngularDamping' value='0.0' />
    <Property name='physicsLinearDamping' value='0.0' />
    <Frame tex='C:/gamesaurus/assets/graphics/laser-bolts.png' x='0.0' y='0.0' w='16.0' h='30.0' u='0.0' v='0.0' uw='0.5' vh='0.9375' addru='3' addrv='3' filter='1' />
    <Frame tex='C:/gamesaurus/assets/graphics/laser-bolts.png' x='0.0' y='0.0' w='16.0' h='30.0' u='0.5' v='0.0' uw='0.5' vh='0.9375' addru='3' addrv='3' filter='1' />
    <Animation name='normal' start='0' end='1' loop='-1' speed='0.25' sheetStart='0' sheetEnd='1' />
    </Object>
</game>

I need to be able to read the Name of each and if it has a property named 'script', get the script that is written Hexadecimal.

Can you help me?

With XMLDocument I am not able to make anything clear.

Thanks in advance!

This is one of the codes I have tried, but I am not getting anything other than the first element and it is not working correctly.

OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "VGS|*.vgs|XML|*.xml";
            ofd.ShowDialog();
            if (ofd.FileName.Length > 0)
            {
                XElement storeXML = XElement.Load(ofd.FileName);

                    var Objects = from elem in storeXML.Element("Object").Elements("Property")
                                  select elem;

                    Console.WriteLine("Numero de elementos: " + Objects.Count());
                    foreach (var i in Objects)
                    {
                        Visor.AppendText(i.Name + ": " + i.Value + "\n");
                        var lista = i.Attributes().ToList();
                        foreach (var x in lista)
                            Visor.AppendText(x.Name + ": " + x.Value + "\n");
                    }

            }

Solution

  • You have a list of objects, each with a list of properties. Therfore you need a nested loop to process:

    var objects = storeXML.Elements("Object");
    Console.WriteLine("Numero de elementos: " + objects.Count());
    foreach (var obj in objects)
    {
        var properties = obj.Elements("Property");
        foreach (var prop in properties)
        {
            Console.WriteLine(prop.Name + ": " + prop.Value);
            var lista = prop.Attributes().ToList();
            foreach (var x in lista)
                Console.WriteLine("  " + x.Name + ": " + x.Value);
        }
    }
    

    In your code, storeXML.Element("Object") will only consider the first <Object> element found.