Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Problem mit Xpath
skelle
myCSharp.de - Member



Dabei seit:
Beiträge: 113

Themenstarter:

Problem mit Xpath

beantworten | zitieren | melden

Hey,
ich habe ein Excel Sheet welches aus mehrern Blättern besteht.
Ich speichere dieses Sheet als XML und habe dann folgende Struktur
<workbook>
    <worksheet>
    </worksheet>
    <worksheet>
    </worksheet>
    <worksheet>
    </worksheet>
</workbook>

und folgenden Source

public Parser(String xml)
        {
            this.doc = new XmlDocument();
            this.doc.LoadXml(xml);

            this.worksheets = this.doc.SelectNodes("//Worksheet");
        }

ich frage mich jetzt wieso selectNodes immer 0 Elemente zurück gibt

habe ich was übersehen?

greetz
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

beantworten | zitieren | melden

mach doch mal:

this.doc.SelectNodes("workbook/worksheet");
private Nachricht | Beiträge des Benutzers
skelle
myCSharp.de - Member



Dabei seit:
Beiträge: 113

Themenstarter:

beantworten | zitieren | melden

habe ich auch schon versucht
ebenfalls keine ergebnisse
private Nachricht | Beiträge des Benutzers
user8744
myCSharp.de - Member



Dabei seit:
Beiträge: 1201

beantworten | zitieren | melden

dann ist dein xml content nicht so wie du ihn beschrieben hast.
hast du noch eine header node?
denk daran das xpath case sensitiv arbeitet.
private Nachricht | Beiträge des Benutzers
rasepretrep
myCSharp.de - Member



Dabei seit:
Beiträge: 105

beantworten | zitieren | melden

//worksheet
private Nachricht | Beiträge des Benutzers
skelle
myCSharp.de - Member



Dabei seit:
Beiträge: 113

Themenstarter:

beantworten | zitieren | melden

Hier mal ein Sample:
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>felix</Author>
  <LastAuthor>felix</LastAuthor>
  <Created>2011-02-28T09:03:40Z</Created>
  <Version>12.00</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>12075</WindowHeight>
  <WindowWidth>24915</WindowWidth>
  <WindowTopX>120</WindowTopX>
  <WindowTopY>120</WindowTopY>
  <ActiveSheet>1</ActiveSheet>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
 <Worksheet ss:Name="eins">
  <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="2" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15">
   <Row>
    <Cell><Data ss:Type="String">a</Data></Cell>
    <Cell><Data ss:Type="String">b</Data></Cell>
   </Row>
   <Row>
    <Cell ss:Index="2"><Data ss:Type="String">b</Data></Cell>
    <Cell><Data ss:Type="String">c</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.78740157499999996" x:Left="0.7" x:Right="0.7"
     x:Top="0.78740157499999996"/>
   </PageSetup>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>28</ActiveRow>
     <ActiveCol>4</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="zwei">
  <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="2" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15">
   <Row>
    <Cell ss:Index="2"><Data ss:Type="String">b</Data></Cell>
    <Cell><Data ss:Type="String">c</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">a</Data></Cell>
    <Cell><Data ss:Type="String">b</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.78740157499999996" x:Left="0.7" x:Right="0.7"
     x:Top="0.78740157499999996"/>
   </PageSetup>
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>2</ActiveRow>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Tabelle3">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15">
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.78740157499999996" x:Left="0.7" x:Right="0.7"
     x:Top="0.78740157499999996"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>

@rasepretrep: das case sensitive habe ich beachtet =/
private Nachricht | Beiträge des Benutzers
rasepretrep
myCSharp.de - Member



Dabei seit:
Beiträge: 105

beantworten | zitieren | melden

Hmm habe gerade mal geschaut wie ich das damals mal bei mir gemacht habe.
Gehts vielleicht so?


XmlNode root = doc.DocumentElement;
XmlNodeList nl = root.SelectNodes("//Worksheet");
private Nachricht | Beiträge des Benutzers
skelle
myCSharp.de - Member



Dabei seit:
Beiträge: 113

Themenstarter:

beantworten | zitieren | melden

Zitat von rasepretrep
Hmm habe gerade mal geschaut wie ich das damals mal bei mir gemacht habe.
Gehts vielleicht so?


XmlNode root = doc.DocumentElement;
XmlNodeList nl = root.SelectNodes("//Worksheet");

leider immernoch 0 Ergebnisse
private Nachricht | Beiträge des Benutzers
skelle
myCSharp.de - Member



Dabei seit:
Beiträge: 113

Themenstarter:

beantworten | zitieren | melden

Sooo habe das Problem soeben lösen können...
ich musste noch mit den namespaces hantieren

XmlNamespaceManager kngr = new XmlNamespaceManager(doc.NameTable);
            kngr.AddNamespace("ss", doc.DocumentElement.NamespaceURI);

            XmlNode nod = doc.DocumentElement;
            XmlNodeList list = nod.SelectNodes("//ss:Worksheet", kngr);

greetz :)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von skelle am .
private Nachricht | Beiträge des Benutzers