Laden...

Problem mit Xpath

Erstellt von skelle vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.919 Views
S
skelle Themenstarter:in
112 Beiträge seit 2005
vor 13 Jahren
Problem mit Xpath

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

Gelöschter Account
vor 13 Jahren

mach doch mal:

this.doc.SelectNodes("workbook/worksheet");

S
skelle Themenstarter:in
112 Beiträge seit 2005
vor 13 Jahren

habe ich auch schon versucht
ebenfalls keine ergebnisse

Gelöschter Account
vor 13 Jahren

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.

R
103 Beiträge seit 2009
vor 13 Jahren

//worksheet

S
skelle Themenstarter:in
112 Beiträge seit 2005
vor 13 Jahren

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 =/

R
103 Beiträge seit 2009
vor 13 Jahren

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");

S
skelle Themenstarter:in
112 Beiträge seit 2005
vor 13 Jahren

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 🤔

S
skelle Themenstarter:in
112 Beiträge seit 2005
vor 13 Jahren

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 😃