PowerShell을 사용하여 XML 파일을 구문 분석하는 방법
-
PowerShell을 사용하여
Select-Xml
로 XML 파일 파싱하기 -
PowerShell을 사용하여
System.Xml.XmlDocument
클래스를 통해 XML 파일 파싱하기 -
PowerShell을 사용하여
System.Xml.XmlTextReader
클래스를 통해 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 요소의 내부 텍스트 내용을 포함하고 있어 원하는 데이터를 추출할 수 있게 해줍니다.
출력:
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
속성 값을 나타냅니다.
출력:
요소를 읽든 속성을 읽든, 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
을 사용하여 컴퓨터 이름을 출력합니다.
출력:
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
을 사용하여 출력합니다.
출력:
결론
PowerShell에서 XML 파싱은 많은 자동화 및 데이터 처리 작업에 있어 다재다능하고 필수적인 기술입니다. Select-Xml
, System.Xml.XmlDocument
, System.Xml.XmlTextReader
와 같은 다양한 방법을 이해함으로써, PowerShell 사용자는 XML 문서에서 데이터를 효율적으로 추출하고 조작할 수 있습니다.
요소를 파싱하든 속성을 파싱하든, 각 방법은 장점이 있으며 PowerShell 스크립트가 XML 데이터를 효과적으로 처리할 수 있게 해줍니다. 이러한 파싱 기술을 활용함으로써 PowerShell 사용자는 작업 흐름을 간소화하고 자동화 목표를 더 효율적으로 달성할 수 있습니다.
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn