2013-08-03 51 views
15

Tôi mới sử dụng PowerShell. Tôi có một cấu hình XML đọc là -Phân tích cú pháp xml bằng powershell

<xml> 
    <Section name="BackendStatus"> 
     <BEName BE="crust" Status="1" /> 
     <BEName BE="pizza" Status="1" /> 
     <BEName BE="pie" Status="1" /> 
     <BEName BE="bread" Status="1" /> 
     <BEName BE="Kulcha" Status="1" /> 
     <BEName BE="kulfi" Status="1" /> 
     <BEName BE="cheese" Status="1" /> 
    </Section> 
</xml> 

Tôi cần phải phân tích từng phần tử trong BEName để kiểm tra Trạng thái. Làm thế nào điều này có thể được thực hiện bằng PowerShell?

Trả lời

38

Bước đầu tiên là để nạp chuỗi xml của bạn vào một XmlDocument, sử dụng khả năng độc đáo powershell của để cast dây tới [xml]

$doc = [xml]@' 
<xml> 
    <Section name="BackendStatus"> 
     <BEName BE="crust" Status="1" /> 
     <BEName BE="pizza" Status="1" /> 
     <BEName BE="pie" Status="1" /> 
     <BEName BE="bread" Status="1" /> 
     <BEName BE="Kulcha" Status="1" /> 
     <BEName BE="kulfi" Status="1" /> 
     <BEName BE="cheese" Status="1" /> 
    </Section> 
</xml> 
'@ 

Powershell làm cho nó thực sự dễ dàng để phân tích cú pháp xml với ký hiệu dấu chấm . tuyên bố này sẽ tạo ra một chuỗi các XmlElements cho các yếu tố BEName của bạn:

$doc.xml.Section.BEName 

Sau đó, bạn có thể ống các đối tượng này vào nơi đối tượng cmdlet để lọc xuống kết quả. Bạn có thể dùng ? như một phím tắt cho nơi

$doc.xml.Section.BEName | ? { $_.Status -eq 1 } 

Biểu thức bên trong dấu ngoặc sẽ được đánh giá đối với từng XmlElement trong các đường ống , và chỉ có những người có một tình trạng trong tổng số 1 sẽ được trả lại. Toán tử $ _ đề cập đến đối tượng hiện tại trong đường ống (một XmlElement).

Nếu bạn cần làm điều gì đó cho mọi đối tượng trong đường ống, bạn có thể đặt các đối tượng vào lệnh ghép ngắn đối tượng, thực hiện một khối cho mọi đối tượng trong đường ống. % là lối tắt cho foreach:

$doc.xml.Section.BEName | ? { $_.Status -eq 1 } | % { $_.BE + " is delcious" } 

Powershell là công cụ tuyệt vời này. Thật dễ dàng để lắp ráp các đường ống của các đối tượng , đường ống lọc và thực hiện các thao tác trên từng đối tượng trong đường ống.

9
[xml]$xmlfile = '<xml> <Section name="BackendStatus"> <BEName BE="crust" Status="1" /> <BEName BE="pizza" Status="1" /> <BEName BE="pie" Status="1" /> <BEName BE="bread" Status="1" /> <BEName BE="Kulcha" Status="1" /> <BEName BE="kulfi" Status="1" /> <BEName BE="cheese" Status="1" /> </Section> </xml>' 

foreach ($bename in $xmlfile.xml.Section.BEName) { 
    if($bename.Status -eq 1){ 
     #Do something 
    } 
} 
9

Nếu bạn muốn bắt đầu với một tập tin mà bạn có thể làm điều này

[xml]$cn = Get-Content config.xml 
$cn.xml.Section.BEName 

Use PowerShell to Parse an XML File

Các vấn đề liên quan