Avatar billede flvind Nybegynder
19. april 2007 - 11:42 Der er 7 kommentarer og
1 løsning

Nested tables i xml

Hej jeg har et problem med at indlæse en xml som indeholder nestede tables.
Jeg har ikke mulighed for at ændre hvordan Xml filen ser ud.
Mit program består af følgende.
- En knap som aktivere søgningen
- Et datagrid hvori resultatet af søgningen skal vises

Jeg forsøger at indlæse indholdet af xmlfilen ved hjælp af følgende kode.

----kode start----
      private void btnRead_Click(object sender, EventArgs e)
        {
            DataSet dataSet1 = new DataSet();
            dataSet1.ReadXml(@"d:\configurationTest.xml");
            dataGridType.DataSource = dataSet1;
        }
----kode stop----

Der fremkommer følgende fejl i linien:
dataSet1.ReadXml(@"d:\configurationTest.xml");

---fejl---
The table (O1) cannot be the child table to itself in nested relations.
---fejl---

Min xml fil ser ud som følger
---xml start---
<?xml version="1.0"?>
<provider>
  <Process>
    <VHC>
      <O1>
        <config>
          <SWTypeID>x</SWTypeID>
          <TMT>
            <O1>
              <config>
                <SWTypeID>VEL01</SWTypeID>
                <Input1>
                  <Name>AI</Name>
                  <FriendlyName>VHC.1.TMT.Inside.Temperature</FriendlyName>
                  <Type>
                    <standard>E-CAT</standard>
                  </Type>
                  <Address>
                    <standard>02.02.01</standard>
                  </Address>
                  <MaxDigital>
                    <standard>32768</standard>
                  </MaxDigital>
                  <MinDigital>
                    <standard>0</standard>
                  </MinDigital>
                  <MaxMeasurement>
                    <standard>10</standard>
                  </MaxMeasurement>
                  <MinMeasurement>
                    <standard>0</standard>
                  </MinMeasurement>
                  <Unit />
                  <ScaleToSI />
                  <UnitSI />
                </Input1>
              </config>
            </O1>
            <O2>
              <config>
                <SWTypeID>x</SWTypeID>
                <Input1>
                  <Name>AI</Name>
                  <FriendlyName>VHC.1.TMT.OutSide.Temperature</FriendlyName>
                  <Type>
                    <standard>E-CAT</standard>
                  </Type>
                  <Address>
                    <standard>02.02.02</standard>
                  </Address>
                  <MaxDigital>
                    <standard>32768</standard>
                  </MaxDigital>
                  <MinDigital>
                    <standard>0</standard>
                  </MinDigital>
                  <MaxMeasurement>
                    <standard>0</standard>
                  </MaxMeasurement>
                  <MinMeasurement>
                    <standard>-50</standard>
                  </MinMeasurement>
                  <Unit />
                  <ScaleToSI />
                  <UnitSI />
                </Input1>
              </config>
            </O2>
          </TMT>
        </config>
      </O1>
    </VHC>
  </Process>
</provider>
---xml stop---

Håber der er nogen der kan hjælpe
Avatar billede nielle Nybegynder
21. april 2007 - 21:17 #1
Du skriver at du ikke har mulighed for at ændre hvordan XML-filen ser ud.

Jeg går ikke ud fra at dette betyder at du slet ikke har lov til at ændre dens udseende før at du forsøger at vise den? Dette kan gøres direkte af programmet, sådan at du ikke selv behøver at redigere noget.

1) Lav en XSLT-fil, og gem den det samme sted som din XML-fil, og med følgende indhold:

===== configurationTest.xslt =====

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//provider/Process/VHC/O1/config" xml:space="preserve" >
<provider>
    <Process>
        <VHC>
            <O1_renamed>
                <config_renamed>
                    <xsl:copy-of select="./*" />
                </config_renamed>
            </O1_renamed>
        </VHC>
    </Process>
</provider>
</xsl:template>
</xsl:stylesheet>

===== configurationTest.xslt =====

Denne vil omdøbe den yderste <O1> til <O1_renamed>, samt den yderste <config> på tilsvarende måde.

2) Derefter tilføjer du lidt kode til dit nuværende:

        private void btnRead_Click(object sender, EventArgs e)
        {
            XslCompiledTransform transf = new XslCompiledTransform();
            transf.Load(@"d:\configurationTest.xslt");
            transf.Transform(@"d:\configurationTest.xml", @"d:\configurationTest_temp.xml");
           
            DataSet dataSet1 = new DataSet();
            dataSet1.ReadXml(@"d:\configurationTest_temp.xml");
            dataGridType.DataSource = dataSet1;
        }

3) Muligvis skal koden suppleres med en sletning af filen d:\configurationTest_temp.xml bagefter for oprydningens skyld.
Avatar billede nielle Nybegynder
29. april 2007 - 22:06 #2
Hvad med noget respons?
Avatar billede flvind Nybegynder
30. april 2007 - 08:10 #3
Hej undskyld tiden men har haft travlt med arbejdet og ikke lige haft tid til at se på din løsning. Jeg har dog arbejdet lidt videre på problemet og er kommet frem til at jeg kan hente informationerne ud ved hjælp af en Xpath søgning. Nu mangler jeg så at finde ud af hvordan jeg skal skrive informationer i XML filen på det fundne sted.
Avatar billede nielle Nybegynder
19. maj 2007 - 09:08 #4
Har du fået kigget på det?
Avatar billede flvind Nybegynder
21. maj 2007 - 08:25 #5
Hej jeg har kigget på det og jeg har valgt ikke at bruge XSLT, men genneløbe filen med en Xpath. Jeg kan få hentet de oplysninger ud jeg har brug for og opbygge en søgning fra det fundne. Jeg ved dog ikke helt hvordan jeg ændrer værdien af en bestemt node i xml filen ved hjælp af at benytte by reference.
Avatar billede nielle Nybegynder
21. maj 2007 - 18:02 #6
Jeg er ikke helt med på hvad du mener med "benytte by reference"?
Avatar billede flvind Nybegynder
22. maj 2007 - 08:58 #7
det er noget med at du kan oprette en reference til den/de fundne noder og så ændres værdien for noden hvis referenceværdien ændres.
Jeg ved ikke helt om jeg får behov for det, men derfor var det jo rart at vide noget om .
Avatar billede flvind Nybegynder
31. oktober 2007 - 15:32 #8
lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester