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 Node

Ve

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 Node

Ve

Kod:

$xmldoc.catalog.book

Dosyadaki tüm yazarları seçmek için.

Kod:

$xmldoc.SelectNodes("//author")

Çıktı:

Benzer komutlar

Kod:

Select-Xml -Xml $xmldoc -XPath "//author" | Select -ExpandProperty Node

Ve

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 Node

Veya

$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].author

Veya

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 Node

Veya

$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.

İlgili makaleler