首頁 >後端開發 >XML/RSS教程 >XML文件搜尋使用小結

XML文件搜尋使用小結

黄舟
黄舟原創
2017-03-03 17:06:201939瀏覽

大家在.NET處理xml文件的時候,常常會需要找到文件中的某個節點的資料。要找到某個節點,有許多種方法,在這裡我就把幾種常用的方法來跟大家總結一下。 
   
  首先,我們要做的是把一個XML文件裝入到一個XmlDocument物件中去。
   
  先引用幾個名字空間: 
   

  using System.Xml; 
  using System.Xml.Xsl; 
  using System.Xml.XPath;

   
  這幾個名字空間大家根據名字就知道它的意思了,我就不在這兒多說了。接著就是裝入XML檔案的程式碼,方法如下: 
   
 

String xmlfile="c:/member.xml"; //其中的xmlfile是你要载入的XML文件的路径。 
  XmlDocument myDoc = new XmlDocument(); //定义一个XmlDocument对象。 
  myDoc.Load(xmlfile);

   
   
  這樣,我們就有一個叫myDoc的XML文檔。我們現在就來找這個文檔中的一些節點。我們先來看這個XML檔的內容。
 

<?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>

   
  我們現在可以用下面的方法找到name為tim的節點: 
  myDoc.ChildNodes.Item(1).ChildNodes.Item(0).FirstChildld .InnerText 
   
  這個方法要求我們一層層向內找我們需要的數據,如果層次很多的話,做起來就會很費勁,也容易出錯。幸好.NET為我們提供了另外一個方法SelectSingleNode和SelectNodes方法可以讓我們直接找到所要的資料。例如,我們要找姓名為「Tim」的使用者的hobby,我們可以用下面的方法: 
  myDoc.SelectSingleNode ("//member[name='Tim']").ChildNodes.Item(1). InnerText 
   
  其中//代表內任層的子節點。這樣我們就可以很快的找到所要的東西。 SelectSingleNode是找到一個單一的節點,SelectNodes可以找到許多節點。 
   
  在XML中尋找某個子節點,大家都知道怎麼做了,我們現在在一個特殊的XML檔案---XSL檔案中去找一個子節點,這個該怎麼實現呢?
   
  假設我現在有一個這樣的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載入進來,在使用之前,我們找到需要修改的節點,用我們的變數對其進行修改。這時候我們要找這個節點的時候需要做些變動,程式碼如下: 
   
 

XmlNamespaceManager nsmanager = new XmlNamespaceManager(xslDoc.NameTable); 
  nsmanager.AddNamespace("xsl", "http://www.w3.org/1999/XSL/Transform"); 
  xslDoc.SelectSingleNode("//xsl:attribute[@name=&#39;src&#39;]", nsmanager).InnerXml = 你所需要输给的变量

   
  也就是說對於類似c6790cd964aa3a1ac5ae76cecbdc246d. ./FTP_Magazine/FTP_Issue/0b4405061552d20d6a74f9c944f8d93b74840d2e8628076055d931bf84be95ea這樣的節點,在我們查找以前,我們需要定義一個XmlNamespaceManager,用它我們就可以找到我們所需要的節點。

 以上就是XML文件搜尋使用小結的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn