Avatar billede flvind Nybegynder
03. maj 2007 - 08:09 Der er 6 kommentarer og
1 løsning

Søgning i XML

Hej jeg vil gerne finde ud af hvilke elementer der har det samme Pset i den medsendte xml.

Jeg er i tvivl om hvordan jeg skal søge filen igennem. Jeg vil gerne vide hvilke undertyper der har det samme Pset.

---XML---
<?xml version="1.0"?>
<provider>
  <Process>
    <Type1>
      <O1>
        <config>
          <SWTypeID>Type01</SWTypeID>
          <Pset>PSetType1</Pset>
          <SubType1>
            <O1>
              <config>
                <SWTypeID>x</SWTypeID>
              </config>
            </O1>
          </SubType1>
          <Subtype2>
            <O1>
              <config>
                <SWTypeID>x</SWTypeID>
              </config>
            </O1>
          </SubType2>
        </config>
      </O1>
    </Type1>
    <Type2>
      <O1>
        <config>
          <SWTypeID>Type2</SWTypeID>
          <Pset>PSetType2</Pset>
          <SubType3>
            <O1>
              <config>
                <SWTypeID>A</SWTypeID>
                <Input1>
                  <Name>AI</Name>
                  <FriendlyName>Type2.SubType3.01</FriendlyName>
                  <Address>
                    <standard>01</standard>
                  </Address>
                </Input1>
              </config>
            </O1>
            <O2>
              <config>
                <SWTypeID>B</SWTypeID>
                <Input1>
                  <Name>AI</Name>
                  <FriendlyName>Type2.SubType3.02</FriendlyName>
                  <Address>
                    <standard>02</standard>
                  </Address>
                </Input1>
              </config>
            </O2>
          </SubType3>
          <SubType4>
            <O1>
              <config>
                <SWTypeID>x</SWTypeID>
                <COMPort>
                  <UnitAddress>10</UnitAddress>
                  <Name>PB</Name>
                  <FriendlyName>Type2.SubType4.01</FriendlyName>
                  <Address>
                    <standard>01</standard>
                </COMPort>
              </config>
            </O1>
            </O1>
            <O2>
              <config>
                <SWTypeID>x</SWTypeID>
                <COMPort>
                  <UnitAddress>11</UnitAddress>
                  <Name>PB</Name>
                  <FriendlyName>Type2.SubType4.02</FriendlyName>
                  <Address>
                    <standard>02</standard>
                  </Address>
                </COMPort>
              </config>
            </O2>
          </SubType4>
        </config>
      </O1>
    </Type2>
    <Type3>
      <O1>
        <config>
          <SWTypeID>Type3</SWTypeID>
          <Pset>PSetType2</Pset>
          <SubType5>
            <O1>
              <config>
                <SWTypeID>x</SWTypeID>
                <COMPort>
                  <Name>MOD</Name>
                  <FriendlyName>Type3.SubType5.01</FriendlyName>
                  <Address>
                    <standard>01</standard>
                  </Address>
                </COMPort>
              </config>
            </O1>
          </SubType5>
        </config>
      </O1>
    </Type3>
  </Process>
</provider>
---XML---
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 08:14 #1
Er det for at finde den næste node med værdien PSetType1?
Ligger filen som en fysisk fil eller henter du den f.eks. fra en database ?
Avatar billede flvind Nybegynder
03. maj 2007 - 08:42 #2
Jeg vil gerne have mulighed for at få vist en liste over hvilke undertyper der deler det samme pset.

Jeg har filen liggende lokalt
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 09:35 #3
Jeg har lavet sådan noget her:
XmlDocument xd = new XmlDocument();
            xd.Load(@"C:\Documents and Settings\NJEE\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\XMLFile1.xml");
            XmlNamespaceManager xmlns = new XmlNamespaceManager(xd.NameTable);

            //System.Diagnostics.Debug.WriteLine(xd.SelectNodes("count(distinct-values(//config/Pset))", xmlns).Count);
            System.Diagnostics.Debug.WriteLine(xd.SelectNodes("//config[Pset='PSetType2']").Count);
            foreach (XmlNode xn in xd.SelectNodes("//config[not(@Pset = preceding-sibling::*/@Pset)]/Pset"))
            {
                if (xd.SelectNodes("//config[Pset='" + xn.InnerXml + "']").Count > 1)
                {
                    foreach (XmlNode xn1 in xd.SelectNodes("//config[Pset='" + xn.InnerXml + "']"))
                    {
                        System.Diagnostics.Debug.WriteLine(xn1.InnerXml);
                    }
                }
            }
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 09:35 #4
Jeg kan ikke få den til ordentligt at selecte kun distinct values
Avatar billede flvind Nybegynder
03. maj 2007 - 09:44 #5
det lyder spændende det må jeg lige kigge på i eftermiddag

jeg syntes også at jeg har prøvet en del forskellige ting men kan ikke få det til at virke.
Avatar billede dr_chaos Nybegynder
03. maj 2007 - 10:10 #6
Du kan evt smide de enkelte xn.InnerXml i en liste eller array og tjekke på om de ligger der i forvejen.
hvis de gør går du ikke ind i
if (xd.SelectNodes("//config[Pset='" + xn.InnerXml + "']").Count > 1)
                {
Avatar billede flvind Nybegynder
31. oktober 2007 - 15:32 #7
lukkes
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