SelectSingleNode возвращает null
От: tripolox Россия  
Дата: 20.11.04 15:56
Оценка:
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>
Re: SelectSingleNode возвращает null
От: Аноним  
Дата: 22.11.04 07:11
Оценка: 2 (1)
Здравствуйте, 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);
Re[2]: SelectSingleNode возвращает null
От: tripolox Россия  
Дата: 23.11.04 19:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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);
Re[3]: SelectSingleNode возвращает null
От: Veselov Россия  
Дата: 24.11.04 04:25
Оценка: 1 (1)
Здравствуйте, 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 там описывает такое поведение, правда почему так реализовано причин не объясняет.
Re: SelectSingleNode возвращает null
От: Аноним  
Дата: 24.11.04 06:46
Оценка:
Здравствуйте, tripolox, Вы писали:

T>
T>XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet");
T>



ИМХО, попробуй так:
root.SelectSingleNode("Worksheet");
Re[2]: SelectSingleNode возвращает null
От: tripolox Россия  
Дата: 26.11.04 14:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, tripolox, Вы писали:


T>>
T>>XmlNode worksheet = root.SelectSingleNode("/Workbook/Worksheet");
T>>



А>ИМХО, попробуй так:

А>
А>root.SelectSingleNode("Worksheet");
А>


так не работает.
Re[3]: SelectSingleNode возвращает null
От: V.Petrovski Беларусь  
Дата: 26.11.04 14:55
Оценка:
Здравствуйте, tripolox, Вы писали:
T>А почему так не работает:

Потому, что Xpath 1.0 не поддерживает default namespace. Читай спецификацию Xpath.
... << RSDN@Home 1.1.4 @@subversion >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.