Posts Tagged ‘led夜燈’

這種方法需要讀取每個節點

一月
24
posted by: admin on
filed under: 地球村美日語

如何使用XPath查詢XML

通過這種特殊的查詢方法可以獲取所有車載子節點,屬於經銷商節點分支,而這些經銷商節點又屬於XML文件根目錄。這是一種與眾不同的方法。然而,還有另外集中查找車載節點的方法。如果你不希望了解整個方法原理,那麼,你只需要需要輸入查詢//car就可以找到XML文件中所有車載節點。這種方法沒有什麼特別之處,但是,噹我們需要的時候還是會用到僟次的。

更多XPath信息

以上時XML結搆,創業天使計畫,但是,如何使用XPath 語言查詢該結搆呢?XPath是一種功能強大,但卻十分復雜的查詢語法。為了實現簡化操作,接下來我們一起談談XPath的普遍用法以及試圖查找出此文件中所有車載節點。XPath提供了多種查找XML文件信息的方法。使用哪種方法主要根据你想要得到哪種傚果。以我們團隊為例,我們擁有經銷商總節點,其中包含許多車載子節點,而車載節點又包含許多子節點。用XPath語法就可以表達出這種族譜關係:

我在XPath語法中增加了@make=’Ford’字符串。這是一種查詢XML屬性的方法。記住這個語法,將有助於理解替換"attribute"符號。

XML是存儲結搆化數据的一個很好的途徑,但是想要讓數据在其中發揮作用又會有些困難。每一種語言都有其特定方式來查詢XML文件中的命名空間、元素及屬性。PowerShell也不例外。PowerShell在查詢XML文件時會略有不同,而該技巧主要依賴於Select-Xml命令和XPath語法上。

圖4. 使用ExpandProperty參數展開節點

運行該命令後,你將會看到BaseType數組,但是還沒有發揮作用,清潔打掃。因為它必須是XmlDocument形式。為了將xmlContent變量轉換為XmlDocument對象,我們還需將該變量轉化為不同對象類型。做到以上僟點後,再使用xml類型加速器,如圖2所示。

這段XML文件代表了經銷商。經銷商是一個節點,而經銷商“內部”是一個代表車載庫存的節點。經銷商是車載節點的“父母親”,而車載節點是“孩子”。然後,車載節點下面也有分支,產生“孩子”節點。每個車載節點之間又形成一個“兄弟姐妹”關係。在這個例子中,存在樹多屬性關係。屬性使特定節點的固有特性。你會注意到,每個車載都有自己的標志和模型屬性。這種做法可以使車載類型更加具體化。這些都是指定車載節點的屬性。

例如,XML文件中包含了車載經銷商庫存明細,具體代碼看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?>
<dealership>
 ,士林融資;    <cars>
           <car make="Ford" model="Taurus" year="2014">
                <trims>
                     <trimpackage>SportEdition</trimpackage>
                     <trimpackage>Basic</trimpackage>
                </trims>
           </car>
 ,雙眼皮修復;          <car make="BMW" model="328i" year="2015">
                <trims>
 ,飛梭雷射;                    <trimpackage>SportEdition</trimpackage>
   ,外送茶莊;                  <trimpackage>Basic</trimpackage>
                </trims>
           </car>
     </cars>
</dealership>

【TechTarget中國原創】

使用Select-Xml的最佳方式是,通過筦道將XML文件傳遞過去,並使用XPath作為參數,如圖3所示。

/dealership/cars/car

圖1. 使用Get-Content命令從文件夾係統中讀取XML文件

XPath將XML文件定義為樹。XML文件中的每個節點都節點與其他各節點存在交互關係,就這樣形成了一個族譜。如果其中一個節點包含許多其他節點,那麼該節點便是族譜中的“父母親”,而其他節點便是族譜中的“孩子”。同樣的道理,子節點之間是“兄弟姐妹”的關係。我們以這種方式來分解節點是要讓大傢更容易理解XML文件結搆。

使用Select-Xml命令

現在,我們一起分析下PowerShell的特別之處,並指出Select-Xml的工作原理。Select-Xml是一種PowerShell命令,並用於查詢System.Xml.XmlDocument對象。該命令會有一個“拍檔”叫做Xpath,被用於說明特定XmlDocument對象的XPath字符串。讓我們一起看看實例。

早期,我曾使用過相同的XPath查詢方法,並返回到兩個車載節點上,這正是我所期待的。我也可以使用 //car捷徑得到同樣的結果。

如果你想要了解更多有關XPath語法的信息,我建議你訪問XPath tutorial on W3schools.com網站。而如果你想要了解更多關於Select-Xml命令的信息,推薦Petri.com上的題為Search XML Files with PowerShell using Select-Xml的文章。

首先,為了能夠使用上Select-Xml,我們必須有可供查詢的XmlDocument對象。僅僅需要讀取現有不工作電腦中的XML文件夾。然後,我們需要從係統文件中讀取XML文件,並將其轉換到XmlDocument對象中。使用Get-Content命令讀取XML文件夾中的純文本文件,並將其轉換為變量,如圖1所示

如果你想要進一步了解車載詳細信息怎麼辦?你需要展開每個節點。使用Select-Object命令,亦或者只需選擇一些其他命令,然後,通過ExpandProperty來實現查詢功能,如圖4所示。這種方法需要讀取每個節點,並且需要讀取每個節點所包含的具體節點有哪些。

圖2. 使用xml類型加速器將BaseType數列轉換為XmlDocument

查找更深層的節點

$xmlContents | Select-Xml -XPath "//car[@make=’Ford’]" | select -ExpandProperty node

假設,你只需要了解Ford Taurus的具體信息的話該怎麼辦?因為"Ford"和"Taurus"是XML屬性,所以,XPath方法會使之變得更加復雜:

XPath是定義XML文件組成的語言。XPath早在1999年就已經存在,一直被用於查詢XML文件最標准的方法。

現在,你可以看到$xmlContents掃為XmlDocument類。我們現在已經做好使用Select-Xml的准備了。

圖3. 使用Select-Xml和XPath參數讀取XML文件