PowerShell을 사용하여 XML 파일을 구문 분석하는 방법

  1. PowerShell을 사용하여 Select-Xml로 XML 파일 파싱하기
  2. PowerShell을 사용하여 System.Xml.XmlDocument 클래스를 통해 XML 파일 파싱하기
  3. PowerShell을 사용하여 System.Xml.XmlTextReader 클래스를 통해 XML 파일 파싱하기
  4. 결론
PowerShell을 사용하여 XML 파일을 구문 분석하는 방법

Extensible Markup Language 또는 XML 형식은 오늘날에도 여전히 널리 사용됩니다. 구성 파일, RSS 피드 및 Office 파일은 XML 형식을 사용하는 몇 가지 예에 불과합니다.

PowerShell에서 XML 파싱은 일반적인 작업으로, 데이터 추출, 구성 관리 및 자동화와 같은 작업에 자주 필요합니다. PowerShell은 XML 파싱을 위한 여러 가지 방법을 제공하지만, 각 방법에는 장점과 사용 사례가 있습니다.

이 문서에서는 PowerShell에서 XML 파싱을 위한 세 가지 방법을 탐구합니다: Select-Xml cmdlet, System.Xml.XmlDocument 클래스 및 System.Xml.XmlTextReader 클래스 사용. 각 방법에 대한 자세한 예제 및 설명을 제공하고, 그 구문, 기능 및 실제 응용 프로그램을 강조합니다.

PowerShell을 사용하여 Select-Xml로 XML 파일 파싱하기

PowerShell XML 요소 파싱하기

먼저, Select-Xml로 XML을 파싱하는 가장 인기 있고 쉬운 방법 중 하나를 다루겠습니다. Select-Xml PowerShell 명령은 XML 파일이나 문자열과 XPath 필터를 제공하여 특정 정보를 추출할 수 있게 해줍니다.

많은 PC에서 PowerShell로 파싱하려는 XML 파일이 있습니다. 예를 들어, 각 머신에는 이름, IP 주소 및 보고서에서 사용할 수 있는 Include 요소가 있습니다.

예제 XML:

<Computers>
	<Computer>
		<Name>WINPC-01</Name>
		<Ip>127.0.0.1</Ip>
		<Include>true</Include>
	</Computer>
	<Computer>
		<Name>WINPC-02</Name>
		<Ip>192.168.1.105</Ip>
		<Include>false</Include>
	</Computer>
	<Computer>
		<Name>WINPC-03</Name>
		<Ip>192.168.1.104</Ip>
		<Include>true</Include>
	</Computer>
</Computers>

PowerShell을 사용하여 이 XML 파일을 파싱하고 컴퓨터 이름을 얻으려고 합니다. 이를 위해 Select-Xml 명령을 사용할 수 있습니다.

예를 들어, 위 파일에서 컴퓨터 이름은 Name 요소의 내부 텍스트(InnerXML)에 나타납니다.

먼저, 컴퓨터 이름을 찾기 위해 적절한 XPath를 제공할 것입니다. 이 XPath 기술을 사용하여 Computer 요소에 포함된 Name 노드만 반환됩니다.

예제 코드:

Select-Xml -Path sample.xml -XPath '/Computers/Computer/Name' | ForEach-Object { $_.Node.InnerXML }

Select-Xml을 사용하여 C:\path\sample.xml에 위치한 XML 파일에서 XPath 표현식 '/Computers/Computer/Name'과 일치하는 노드를 검색합니다. 이 XPath 표현식은 PowerShell이 <Computers> 루트 노드 아래의 각 <Computer> 요소 내에서 모든 <Name> 요소를 선택하도록 지시합니다.

그런 다음 ForEach-Object cmdlet을 사용하여 Select-Xml cmdlet이 반환한 결과를 반복합니다. 이 루프 내에서 각 일치하는 노드의 InnerXML 속성에 접근합니다.

이 속성은 XML 요소의 내부 텍스트 내용을 포함하고 있어 원하는 데이터를 추출할 수 있게 해줍니다.

출력:

파워셸 XML 구문 분석 - 출력 1

PowerShell XML 속성 파싱하기

이제 컴퓨터 이름을 찾는 새로운 접근 방식을 살펴보겠습니다. XML 요소로 표현되는 대신, 컴퓨터 설명자가 XML 속성으로 직접 표현됩니다.

아래는 속성으로 표현된 컴퓨터 설명자를 포함한 예제 XML 파일입니다. 이제 각 설명자를 요소가 아닌 속성으로 볼 수 있습니다.

예제 XML:

<Computers>
	<Computer name="WINPC-01" ip="127.0.0.1" include="true" />
	<Computer name="WINPC-02" ip="192.168.1.104" include="false" />
	<Computer name="WINPC-03" ip="192.168.1.105" include="true" />
</Computers>

각 설명자가 속성이므로 XPath를 조정하여 Computer 요소를 찾기만 하면 됩니다. 그런 다음 ForEach-Object cmdlet을 사용하여 name 속성의 값을 찾습니다.

예제 코드:

Select-Xml -Path sample.xml -XPath '/Computers/Computer' | ForEach-Object { $_.Node.name }

Select-Xml을 사용하여 C:\path\computers-attr.xml에 위치한 XML 파일에서 XPath 표현식 '/Computers/Computer'와 일치하는 노드를 검색합니다. 이 XPath 표현식은 <Computers> 루트 노드 아래의 모든 <Computer> 요소를 선택합니다.

그런 다음 ForEach-Object cmdlet을 사용하여 결과를 반복하고, 루프 내에서 각 일치하는 노드의 name 속성에 접근합니다. 이 속성은 각 <Computer> 요소의 name 속성 값을 나타냅니다.

출력:

파워셸 XML 파싱 - 출력 2

요소를 읽든 속성을 읽든, Select-Xml의 구문은 번거롭습니다: XPath 매개 변수를 사용하도록 강제하며, 결과를 파이프로 루프로 전달한 다음, 마지막으로 Node 속성 아래에서 데이터를 찾아야 합니다.

PowerShell을 사용하여 System.Xml.XmlDocument 클래스를 통해 XML 파일 파싱하기

PowerShell에서 XML을 파싱하기 위한 System.Xml.XmlDocument 클래스는 XML 데이터를 처리하기 위한 다재다능하고 효과적인 솔루션을 제공하여 다양한 자동화 작업, 데이터 처리 및 구성 관리 시나리오에 유용한 도구입니다.

이 방법은 XmlDocument 클래스의 인스턴스를 생성하고 XML 콘텐츠를 문서 객체에 로드한 다음, 문서의 노드를 탐색하여 원하는 데이터에 접근하는 과정입니다.

예제 코드:

$xmlDocument = New-Object System.Xml.XmlDocument
$xmlDocument.Load("sample.xml")

$computerNodes = $xmlDocument.SelectNodes("//Computer")
foreach ($computerNode in $computerNodes) {
    $name = $computerNode.SelectSingleNode("Name").InnerText
    Write-Output $name
}

이 코드 조각에서는 New-Object를 사용하여 System.Xml.XmlDocument 클래스의 새 인스턴스를 생성합니다. 그런 다음 Load 메서드를 사용하여 C:\path\computers.xml 파일에서 XML 내용을 $xmlDocument 객체로 로드합니다.

SelectNodes 메서드를 사용하여 XML 문서에서 모든 <Computer> 요소를 가져옵니다.

그런 다음 foreach 루프를 사용하여 각 <Computer> 노드를 반복합니다. 루프 내에서 SelectSingleNode를 사용하여 각 <Computer> 노드 내부의 <Name> 요소를 찾아 InnerText 속성을 사용하여 해당 텍스트를 추출합니다.

마지막으로 Write-Output을 사용하여 컴퓨터 이름을 출력합니다.

출력:

파워셸 XML 구문 분석 - 출력 3

PowerShell을 사용하여 System.Xml.XmlTextReader 클래스를 통해 XML 파일 파싱하기

System.Xml.XmlTextReader 클래스를 사용하여 PowerShell에서 XML을 파싱하는 것은 XML 데이터를 처리하는 간단하고 메모리 효율적인 방법을 제공합니다. 이 클래스는 전체 문서를 메모리에 로드하지 않고도 XML 데이터를 효율적으로 파싱하는 전방향 전용 읽기 스트림을 제공합니다.

XmlTextReader를 활용하면 PowerShell 스크립트가 XML 문서에서 특정 요소나 속성을 효율적으로 추출할 수 있어 데이터 추출, 구성 관리 및 자동화와 같은 작업을 가능하게 합니다.

예제 코드:

$xmlFilePath = "sample.xml"
$xmlReader = [System.Xml.XmlTextReader]::new($xmlFilePath)

while ($xmlReader.Read()) {
    if ($xmlReader.NodeType -eq "Element" -and $xmlReader.Name -eq "Name") {
        $name = $xmlReader.ReadString()
        Write-Output $name
    }
}

이 코드 조각에서는 $xmlFilePath 변수를 사용하여 XML 파일의 경로를 지정합니다. 그런 다음 System.Xml.XmlTextReader 클래스의 새 인스턴스를 생성하고 $xmlFilePath로 지정된 파일의 XML 콘텐츠로 초기화합니다.

while 루프를 사용하여 XmlTextReader 클래스의 Read 메서드를 사용해 XML 콘텐츠를 반복합니다. 루프 내에서 현재 노드 타입이 요소인지, 그리고 그 이름이 Name인지 확인합니다.

두 조건이 모두 충족되면 ReadString 메서드를 사용하여 <Name> 요소의 내부 텍스트를 추출하고, Write-Output을 사용하여 출력합니다.

출력:

파워셸 xml 분석 - 출력 4

결론

PowerShell에서 XML 파싱은 많은 자동화 및 데이터 처리 작업에 있어 다재다능하고 필수적인 기술입니다. Select-Xml, System.Xml.XmlDocument, System.Xml.XmlTextReader와 같은 다양한 방법을 이해함으로써, PowerShell 사용자는 XML 문서에서 데이터를 효율적으로 추출하고 조작할 수 있습니다.

요소를 파싱하든 속성을 파싱하든, 각 방법은 장점이 있으며 PowerShell 스크립트가 XML 데이터를 효과적으로 처리할 수 있게 해줍니다. 이러한 파싱 기술을 활용함으로써 PowerShell 사용자는 작업 흐름을 간소화하고 자동화 목표를 더 효율적으로 달성할 수 있습니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

관련 문장 - PowerShell XML