XML文檔搜索使用小結(jié)
2024-09-05 20:53:31
供稿:網(wǎng)友
 
						大家在.NET中處理XML文檔的時候,經(jīng)常會需要找到文檔中的某個節(jié)點的數(shù)據(jù)。要找到某個節(jié)點,有許多種方法,在這里我就把幾種常用的方法給大家總結(jié)一下。 
  首先,我們要做的是要把一個XML文檔裝入到一個XmlDocument對象中去。 
  先引用幾個名字空間: 
  using System.Xml; 
  using System.Xml.Xsl; 
  using System.Xml.XPath; 
  這幾個名字空間大家根據(jù)名字就知道它的意思了,我就不在這兒多說了。然后就是裝入XML文件的代碼,方法如下: 
  String xmlfile="c:/member.xml"; //其中的xmlfile是你要載入的XML文件的路徑。 
  XmlDocument myDoc = new XmlDocument(); //定義一個XmlDocument對象。 
  myDoc.Load(xmlfile); 
   
  這樣,我們就有一個叫myDoc的XML文檔。我們現(xiàn)在就來找這個文檔中的一些節(jié)點。我們先來看這個XML文件的內(nèi)容。 
  <?xml version="1.0" encoding="UTF-8"?> 
  <members> 
   <member> 
   <name>Tim</name> 
   <hobby>reading</hobby> 
   <homepage>www.aspcool.com</homepage> 
   </member> 
   <member> 
   <name>Sandy</name> 
   <hobby>learning</hobby> 
   </member> 
   <member> 
   <name>Shally</name> 
   <hobby>tranlating</hobby> 
   </member> 
   <member> 
   <name>Christine</name> 
   <hobby>working</hobby> 
   </member> 
  </members> 
  我們現(xiàn)在可以用下面的方法找到name為tim的節(jié)點: 
  myDoc.ChildNodes.Item(1).ChildNodes.Item(0).FirstChild.InnerText 
  這個方法要求我們一層層向內(nèi)找我們需要的數(shù)據(jù),如果層次很多的話,做起來就會很費(fèi)勁,也容易出錯。幸好.NET給我們提供了另外一個方法SelectSingleNode和SelectNodes方法可以讓我們直接找到所要的數(shù)據(jù)。比如,我們要找姓名為“Tim”的用戶的hobby,我們可以用下面的方法: 
  myDoc.SelectSingleNode ("http://member[name='Tim']").ChildNodes.Item(1).InnerText 
  其中//代表里面任意層的子節(jié)點。這樣我們就可以很快的找到所要的東西。SelectSingleNode是找到一個單一的節(jié)點,SelectNodes可以找到許多節(jié)點。 
  在XML中尋找某個子節(jié)點,大家都知道怎么做了,我們現(xiàn)在在一個特殊的XML文件---XSL文件中去找一個子節(jié)點,這個應(yīng)該怎么實現(xiàn)呢? 
  假設(shè)我現(xiàn)在有一個這樣的XSL文件: 
  <?xml version="1.0" encoding="gb2312"?> 
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
   <xsl:preserve-space elements="codes"/> 
   <xsl:template match="/"> 
   <xsl:apply-templates/> 
   </xsl:template> 
   <xsl:template match="image"> 
   <table align="{@location}"> 
   <tr> 
   <td> 
   <img align="{@location}" alt="{text()}"> 
   <xsl:attribute name="src">../FTP_Magazine/FTP_Issue/<xsl:value-of select="@url"/></xsl:attribute> 
   </img> 
   </td> 
   </tr> 
   <tr> 
   <td> 
   <center> 
   <xsl:apply-templates/> 
   </center> 
   </td> 
   </tr> 
   </table> 
   </xsl:template> 
  </xsl:stylesheet> 
  我們在asp.net中有兩個變量,我們需要XSL文件在Transform XML文件的時候采用這兩個變量。我們該如何去做呢? 
  我所采取的方法是先把XSL文件作為XML Document裝載進(jìn)來,在使用之前,我們找到需要修改的節(jié)點,用我們的變量對其進(jìn)行修改。這個時候我們查找這個節(jié)點的時候需要做些變動,代碼如下: 
  XmlNamespaceManager nsmanager = new XmlNamespaceManager(xslDoc.NameTable); 
  nsmanager.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform"); 
  xslDoc.SelectSingleNode("http://xsl:attribute[@name='src']", nsmanager).InnerXml = 你所需要輸給的變量 
  也就是說對于類似<xsl:attribute name="src">../FTP_Magazine/FTP_Issue/<xsl:value-of select="@url"/></xsl:attribute>這樣的節(jié)點,在我們查找以前,我們需要定義一個XmlNamespaceManager,用它我們就可以找到我們所需要的節(jié)點。