KiMoGiGi 技术文集

不在乎选择什么,而在乎坚持多久……

IT博客 首页 联系 聚合 管理
  185 Posts :: 14 Stories :: 48 Comments :: 0 Trackbacks
Scenario 

现有XML文件:
<?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>微软中国</Author>
    
<LastAuthor>微软中国</LastAuthor>
    
<Created>2007-12-18T14:27:37Z</Created>
    
<Company>微软中国</Company>
    
<Version>11.6360</Version>
  
</DocumentProperties>
  
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
    
<WindowHeight>8550</WindowHeight>
    
<WindowWidth>11700</WindowWidth>
    
<WindowTopX>240</WindowTopX>
    
<WindowTopY>75</WindowTopY>
    
<ProtectStructure>False</ProtectStructure>
    
<ProtectWindows>False</ProtectWindows>
  
</ExcelWorkbook>
  
<Styles>
    
<Style ss:ID="Default" ss:Name="Normal">
      
<Alignment ss:Vertical="Center"/>
      
<Borders/>
      
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>
      
<Interior/>
      
<NumberFormat/>
      
<Protection/>
    
</Style>
  
</Styles>
  
<Worksheet ss:Name="Sheet1">
    
<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
     x:FullRows
="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
    
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
      
<Selected/>
      
<ProtectObjects>False</ProtectObjects>
      
<ProtectScenarios>False</ProtectScenarios>
    
</WorksheetOptions>
  
</Worksheet>
  
<Worksheet ss:Name="Sheet2">
    
<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
     x:FullRows
="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
    
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
      
<ProtectObjects>False</ProtectObjects>
      
<ProtectScenarios>False</ProtectScenarios>
    
</WorksheetOptions>
  
</Worksheet>
  
<Worksheet ss:Name="Sheet3">
    
<Table ss:ExpandedColumnCount="0" ss:ExpandedRowCount="0" x:FullColumns="1"
     x:FullRows
="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"/>
    
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
      
<ProtectObjects>False</ProtectObjects>
      
<ProtectScenarios>False</ProtectScenarios>
    
</WorksheetOptions>
  
</Worksheet>
</Workbook>

1、要读取Worksheet节点个数
 XmlDocument doc = new XmlDocument();
            doc.Load(
@"D:\appTemp\Try\ClassLibrary1\Book1.xml");

            XmlNode rootNode 
= doc.DocumentElement;//根节点

            XmlNamespaceManager namespaceManager 
= new XmlNamespaceManager(doc.NameTable);
            
//添加命名空间声明
            namespaceManager.AddNamespace("d""urn:schemas-microsoft-com:office:spreadsheet"); //默认命名空间也要添加名称
            namespaceManager.AddNamespace("o""urn:schemas-microsoft-com:office:office");
            namespaceManager.AddNamespace(
"x""urn:schemas-microsoft-com:office:excel");
            namespaceManager.AddNamespace(
"ss""urn:schemas-microsoft-com:office:spreadsheet");
            namespaceManager.AddNamespace(
"html""http://www.w3.org/TR/REC-html40");

            Console.WriteLine(rootNode.SelectNodes(
"/d:Workbook/d:Worksheet",                   //调用默认的命名空间Prefix
                namespaceManager).Count);

或者不使用XmlNamespaceManager,在XPath使用函数local-name()。

Console.WriteLine(rootNode.SelectNodes("//*[local-name()='Worksheet']").Count);

其中XPath意思:在整个XML所有元素中寻找处于第一位的节点的扩展名称本地部分为“Worksheet”的节点元素。

MSND(vs2005)

扩展名称通常包括命名空间 URI(或关联的前缀)、冒号 (:) 和本地部分。例如,b:author 是扩展名称,其中 b 是命名空间 URI 前缀,author 是本地部分。所以,对此节点应用 local-name() 函数将返回 author。如果节点没有扩展名称,例如 author,对此节点应用 local-name() 函数将返回原始节点名称,即 author


2、查找Workbook\DocumentProperties节点
 //DocumentProperties使用另外的默认命名空间“urn:schemas-microsoft-com:office:office”
            Console.WriteLine(rootNode.SelectSingleNode("/d:Workbook/o:DocumentProperties",
                namespaceManager).InnerText);


注意,要用1的namespaceManager对象。

3、获取Workbook中Name等于"Sheet1"的Worksheet节点中,Table的DefaultColumnWidth属性值。

Console.WriteLine(rootNode.SelectSingleNode("/d:Workbook/d:Worksheet[@ss:Name='Sheet1']/d:Table/@ss:DefaultColumnWidth",
               namespaceManager).Value);

注意,要用1的namespaceManager对象。

posted on 2007-12-19 00:20 KiMoGiGi 阅读(665) 评论(0)  编辑 收藏 引用 所属分类: C# / Winforms
只有注册用户登录后才能发表评论。