XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlElement root = doc.DocumentElement;
XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet");
После этого кода в worksheet null
Подскажите чего я не так делаю, т.к. root.ChildNodes содержит все элементы, которые должен содержать, проверял дебаггером.
Файл который загружаю:
<?xml version="1.0" ?>
- <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">
- <Worksheet ss:Name="1234.xls">
+ <Table ss:ExpandedColumnCount="11" ss:ExpandedRowCount="115" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="42" ss:DefaultRowHeight="11.25">
<Column ss:AutoFitWidth="0" ss:Width="45.75" />
<!--Тут еще дофига значений-->
</Table>
+ <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
- <PageSetup>
<PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996" x:Right="0.78740157499999996" x:Top="0.984251969" />
</PageSetup>
<Selected />
<TopRowVisible>3</TopRowVisible>
- <Panes>
- <Pane>
<Number>3</Number>
<ActiveRow>11</ActiveRow>
<ActiveCol>6</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Здравствуйте, tripolox, Вы писали:
T>T>XmlDocument doc = new XmlDocument();
T>doc.Load(filename);
T>XmlElement root = doc.DocumentElement;
T>XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet");
T>
T>После этого кода в worksheet null
T>Подскажите чего я не так делаю, т.к. root.ChildNodes содержит все элементы, которые должен содержать, проверял дебаггером.
T>Файл который загружаю:
T>T> <?xml version="1.0" ?>
T>- <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">
T>- <Worksheet ss:Name="1234.xls">
T>+ <Table ss:ExpandedColumnCount="11" ss:ExpandedRowCount="115" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="42" ss:DefaultRowHeight="11.25">
T> <Column ss:AutoFitWidth="0" ss:Width="45.75" />
T> <!--Тут еще дофига значений-->
T> </Table>
T>+ <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
T>- <PageSetup>
T> <PageMargins x:Bottom="0.984251969" x:Left="0.78740157499999996" x:Right="0.78740157499999996" x:Top="0.984251969" />
T> </PageSetup>
T> <Selected />
T> <TopRowVisible>3</TopRowVisible>
T>- <Panes>
T>- <Pane>
T> <Number>3</Number>
T> <ActiveRow>11</ActiveRow>
T> <ActiveCol>6</ActiveCol>
T> </Pane>
T> </Panes>
T> <ProtectObjects>False</ProtectObjects>
T> <ProtectScenarios>False</ProtectScenarios>
T> </WorksheetOptions>
T> </Worksheet>
T> </Workbook>
T>
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("def", "
urn:schemas-microsoft-com:office:spreadsheet");
XmlNode root=doc.DocumentElement;
XmlNode worksheet = root.SelectSingleNode("/def:Workbook/def:Worksheet", nsmgr);
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, tripolox, Вы писали:
<!-- skipped -->
А> XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
А> nsmgr.AddNamespace("def", "urn:schemas-microsoft-com:office:spreadsheet");
А> XmlNode root=doc.DocumentElement;
А> XmlNode worksheet = root.SelectSingleNode("/def:Workbook/def:Worksheet", nsmgr);
А почему так не работает:
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("", "urn:schemas-microsoft-com:office:spreadsheet");
XmlNode root=doc.DocumentElement;
XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet", nsmgr);
Здравствуйте, tripolox, Вы писали:
T>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, tripolox, Вы писали:
T><!-- skipped -->
А>> XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
А>> nsmgr.AddNamespace("def", "urn:schemas-microsoft-com:office:spreadsheet");
А>> XmlNode root=doc.DocumentElement;
А>> XmlNode worksheet = root.SelectSingleNode("/def:Workbook/def:Worksheet", nsmgr);
T>А почему так не работает:
T>T>XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
T>nsmgr.AddNamespace("", "urn:schemas-microsoft-com:office:spreadsheet");
T>XmlNode root=doc.DocumentElement;
T>XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet", nsmgr);
T>
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemXmlXmlNodeClassSelectSingleNodeTopic1.asp
Почитай в Remarks, MS там описывает такое поведение, правда почему так реализовано причин не объясняет.
Здравствуйте, tripolox, Вы писали:
T>T>XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet");
T>
ИМХО, попробуй так:
root.SelectSingleNode("Worksheet");
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, tripolox, Вы писали:
T>>T>>XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet");
T>>
А>ИМХО, попробуй так:
А>А>root.SelectSingleNode("Worksheet");
А>
так не работает.
Здравствуйте, tripolox, Вы писали:
T>А почему так не работает:
Потому, что Xpath 1.0 не поддерживает default namespace. Читай спецификацию Xpath.
... << RSDN@Home 1.1.4 @@subversion >>