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
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 =/
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");
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 🤔
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 😃