PowerShell XML Ayrıştırma | PowerShell XML Ayrıştırma Konusuna Hızlı Bakış
PowerShell XML Ayrıştırma'ya Giriş
Aşağıdaki makalede PowerShell XML Ayrıştırma için bir taslak sağlanmaktadır. XML ayrıştırma, XML belgenize bağlanmak ve belgenin içeriğini okumak, belirli XML belgelerini filtrelemek, düğümlere gitmek ve XML belgesini doğrulamak için kullanılan kitaplık veya işlemdir. PowerShell, belgeyi ayrıştırmak için Select-XML komut satırını kullanır. Buna karşılık, XML belgesi arama ve okunabilirlik kolaylığı için XML belgesini ayrıştırmak için XPath (XML yolu) yöntemini ve .Net yöntemi adı verilen başka bir yöntemi kullanır.
PowerShell XML Ayrıştırmanın Sözdizimi
Aşağıda belirtilen sözdizimi verilmiştir:
Select-Xml
[-Xml] <XmlNode[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Select-Xml
[-Path] <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Select-Xml
-LiteralPath <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Select-Xml
-Content <String[]>
[-XPath] <String>
[-Namespace <Hashtable>]
[<CommonParameters>]Yukarıdaki 4 farklı, aynı anda yalnızca bir çiftin kullanılabileceğini belirtmektedir. Mesela -LiteralPath ve -Content parametresini aynı anda kullanamayız. Bahsedildiği gibi aynı kombinasyonda kullanılabilirler.
PowerShell'de XML Ayrıştırma Nasıl Gerçekleştirilir?
Bildiğimiz gibi XML ayrıştırma, XML belgelerini, sözdizimini ve düğümlerde gezinmeyi analiz etmektir. XML bunun için Select-XML komut satırını veya .Net yöntemini kullanır.
Aşağıda gösterilen örnek bir XML dosyamız olduğunu varsayalım:
Örnek XML dosyasının bir kısmı MS web sitesinden alınmıştır.
https://learn.microsoft.com/en-us/önceki-versiyonlar/windows/desktop/ms762271(v=vs.85)
Kod:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
</catalog>XML içeriğiyle çalışmak için öncelikle içeriğin XML biçiminde aktarılmasına ihtiyacımız var. Basit Get-Content komutunu kullanırsak, bu gerçek XML formatında değil ham içerikte olacaktır.
Kod:
Get-Content C:\Temp\books.xmlÇıktı:
Select-XML yöntemi veya DotNet yöntemiyle çalışmak için ham dosyayı XML formatına dönüştürmemiz gerekiyor.
Bir dosyayı XML'e dönüştürmenin iki yolu vardır.
- Tür Dönüşümü
$xmldoc = [xml](Get-Content C:\Temp\books.xml)- Tip Ekleme Yöntemi ile
$xml = New-Object -TypeName XML
$xml.Load('C:\Temp\books.xml')
Select-XML yöntemini kullandığımızda XPath zorunludur.
XPath kullanarak kök düğümü (katalog) seçmek için.
Kod:
Select-Xml -Xml $xml -XPath "/catalog"Çıktı:
Gezinmenin diğer yolu DotNet yöntemini kullanmaktır.
Kod:
$xml.catalog
book
----
{book, book, book}PowerShell XML Ayrıştırma Örnekleri
Aşağıda belirtilen örnekler verilmiştir:
Örnek #1
Kök düğümü genişletin.
Kök veya ilk ana düğümü (katalog) genişletmek için Select-XML yöntemiyle.
Kod:
$xmldoc = [xml](Get-Content C:\Temp\books.xml)
Select-Xml -Xml $xmldoc -XPath "/catalog"Çıktı:
Yukarıdaki çıktıyı aldıktan sonra Node özelliğini genişletmemiz gerekiyor.
Kod:
Select-Xml -Xml $xmldoc -XPath "/catalog" | Select -ExpandProperty NodeÇıktı:
Örnek #2
SelectNodes yöntemini kullanma.
XML dosyasından arama yapmak için Select-XML yöntemini kullanmak yerine SelectNodes yöntemini kullanabiliriz.
Kod:
$xmldoc = [xml](Get-Content C:\Temp\books.xml)
$xmldoc.SelectNodes("/catalog")Çıktı:
Yukarıdaki örnekte '/' kök düğümden seçimden bahseder. Kök düğümde yalnızca 'Katalog' düğümümüz mevcuttur. Bunun yerine ‘Kitap’ düğümünü kullanırsak kök seviyesinde olmadığı için herhangi bir çıktı vermeyecektir.
xPath yönteminde ‘//’ sözdizimini kullandığımızda, o düğümü nerede olursa olsun tüm belgeden seçer.
Kod:
PS C:\> $xmldoc.SelectNodes("//catalog")Çıktı:
Bu, tüm katalog düğümlerini arayacaktır.
Yukarıdaki komut buna benzer.
Kod:
Select-Xml -Xml $xmldoc -XPath "//catalog" | Select -ExpandProperty NodeVe
Kod:
$xmldoc.catalogÇıktı:
XML dosyasından tüm kitapları seçmek için.
Kod:
$xmldoc.SelectNodes("//book")Çıktı:
Benzer komutlar
Kod:
Select-Xml -Xml $xmldoc -XPath "//book" | Select -ExpandProperty NodeVe
Kod:
$xmldoc.catalog.bookDosyadaki tüm yazarları seçmek için.
Kod:
$xmldoc.SelectNodes("//author")Çıktı:
Benzer komutlar
Kod:
Select-Xml -Xml $xmldoc -XPath "//author" | Select -ExpandProperty NodeVe
Kod:
$xmldoc.catalog.Book.authorÇıktı:
Örnek #3
SelectSingleNode yöntemini kullanma.
SelectSingleNode yöntemi belirli bir düğüm çıktısını almaktır. Varsayılan olarak bu komut, dizinden bahsedilmiyorsa ve dizin XML'de 1'den başlıyorsa dizideki ilk çıktıyı seçer.
Kod:
$xmldoc.SelectSingleNode('//book')Çıktı:
Bu komut şuna benzer:
Kod:
$xmldoc.SelectSingleNode('//book[1]')Veya
Select-Xml -Xml $xmldoc -XPath "//book[1]" | Select -ExpandProperty NodeVeya
$xmldoc.catalog.book[1]- Başka bir düğüm seçmek için:
Diyelim ki ikinci kitabın yazarını seçmek istiyoruz, o zaman aşağıdaki örneği kullanabiliriz.
Kod:
$xmldoc.SelectSingleNode("//book[2]/author")
Select-Xml -Xml $xmldoc -XPath "//book[2]/author"Çıktı:
Alternatif komutlar
Kod:
$xmldoc.catalog.book[2].authorVeya
Select-Xml -Xml $xmldoc -XPath "//book[2]/author" | Select -ExpandProperty NodeÇıktı:
Örnek #4
Belirli bir özelliğin seçilmesi.
Bu örnekte belirli bir özelliği seçeceğiz. Burada kitap kimliğine sahip düğümü seçmemiz gerekiyor: bk103.
Kod:
$xmldoc.SelectNodes( "//book[@id='bk103']" )Çıktı:
Aşağıda gösterildiği gibi Select-XML ve dotnet yöntemi için alternatif komutları da kullanabilirsiniz.
Kod:
Select-Xml -Xml $xmldoc -XPath("//book[@id='bk103']") | Select -ExpandProperty NodeVeya
$xmldoc.catalog.book | where {$_.id -eq 'bk103'}Çıktı:
Örnek #5
Birden fazla öğe seçme.
Birden fazla öğe seçmek için aşağıdaki komutu kullanabiliriz.
Kod:
$xmldoc.SelectNodes("//book/title | //book/author")Veya
$xmldoc.SelectNodes("//title | //author")Yukarıdaki komut, XML dosyasından başlığı ve yazarı seçer.
Çıktı:
Benzer komutlar
Kod:
Select-Xml -Xml $xmldoc -XPath ("//title | //author") | Select -ExpandProperty Node$xmldoc.catalog.book | Select Title, AuthorÇıktı:
Örnek #6
Tek ve Çift nokta sözdizimi Xpath.
XPath sözdiziminde Nokta (.) geçerli düğümü, çift nokta (..) ise geçerli düğümün üst öğesini temsil eder.
Kod:
$xmldoc.SelectSingleNode("//catalog/.")Çıktı:
Yukarıdaki örnek geçerli düğümü temsil eder.
Kod:
$xmldoc.SelectSingleNode("//catalog/..")Çıktı:
Yukarıdaki örnek ana düğümü temsil etmektedir.
Çözüm
PowerShell XML ayrıştırma yöntemleri XML belgeleriyle çalışırken kullanışlıdır, bu nedenle uygulamada kullanıldığında uygulamaların daha büyük belgelerde hızlı bir şekilde arama yapması ve gezinmesi daha kolay olabilir ve ayrıca web işleme için çok hızlıdır.




















