2012-10-24 26 views
3

刪除一組XML元素我也有類似的XML文檔在下面的內容:使用PowerShell

<variables> 
    <variable> 
     <name>ctrl_btn</name> 
     <value>button</value> 
    </variable> 
    <variable> 
     <name>ctrl_snpt_calctrl</name> 
     <value>The date entered must be less than or equal to</value> 
    </variable> 
</variables> 

我可以使用PowerShell文檔中拉出來的某些元素(如抓名稱或基於索引號的值元素)。但是,我並不關注這些指數如何工作(或者不管指數是什麼)。例如,查找名稱[1]給我ctrl_btn,但我會認爲這將是名[0]。有人可以解釋嗎?

我的真正的問題,但是,是創建一個腳本,刪除文檔中的元素的某些集合。例如,如果我想刪除以下內容:

<variable> 
     <name>ctrl_snpt_calctrl</name> 
     <value>The date entered must be less than or equal to</value> 
    </variable> 

我已經四處搜尋,但大多數的例子只是從XML刪除某個節點,而不是一整羣的上方。

的名稱和值始終是XML文檔(其中,順便說一句,包含了超過5000種不同的名稱/值連擊在<variable></variable>元素中是唯一的。

我想刪除都包含在元素的列表。僅列出姓名值的文本文件(例如,文本文件將列出ctrl_btn然後ctrl_snpt_calctrl)

爲了讓您更好的瞭解,這裏的整個過程中,該腳本的作用:

  1. 獲取XML的內容cument
  2. 獲取文檔中所有項目的<name></name>元素之間的值
  3. 對文件列表運行搜索以驗證文件中是否使用了該名稱。
  4. 如果未使用的名稱,它被寫入的文本文件(例如,not_found.txt)。
  5. 刪除<variable></variable>標籤以及它們之間的所有內容,如果``等於在not_found.txt中找到的名稱。

我不確定上述過程是否有助於解釋,但我認爲我最好包括它。

那麼,你如何刪除這些?

回答

7

假設你有每一個元素是要刪除的變量元素的名稱的字符串數組,你可以做到以下幾點:

$names = 'ctrl_btn','ctrl_snpt_calctrl' 

$xml.variables.variable | ? { $names -contains $_.name } | % {$xml.variables.RemoveChild($_)} 

我可以使用PowerShell拉出一定在文檔內的元件(諸如抓基於索引編號的名稱或值元素)。不過,我不遵循這些指標是如何工作的(或任何索引可以被調用)。例如,查找名稱[1]給了我ctrl_btn,但我會假設這將是名稱[0]。有人可以解釋嗎?

無法保證Xml順序,所以不要依賴於此。例如,在我的機器上,我得到了您期望的結果:

$xml.variables.variable.name[0] = ctrl_btn 

$xml.variables.variable.name[1] = ctrl_snpt_calctrl 
+0

我該如何在通過數百個列表循環的foreach循環中工作? – EustaceMonk

+0

將更新答案。 – dugas

+0

這工作完美!我也學會了保存它,我只需要使用下面的代碼:'$ xml.Save(「filepath」)'。謝謝! – EustaceMonk