programing

powershell을 사용하여 xml 구문 분석

powerit 2023. 9. 5. 20:52
반응형

powershell을 사용하여 xml 구문 분석

파워셸은 처음입니다.다음과 같은 구성 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>

각 요소를 구문 분석해야 합니다.BEName상태를 선택합니다.PowerShell을 사용하여 이 작업을 수행하는 방법은 무엇입니까?

첫 번째 단계는 [xml]에 문자열을 캐스팅하는 powershell의 고유한 기능을 사용하여 xmlDocument에 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을 사용하면 점 표기법으로 xml을 쉽게 구문 분석할 수 있습니다.이 문은 BEName 요소에 대한 일련의 XmlElements를 생성합니다.

$doc.xml.Section.BEName

그런 다음 이러한 개체를 where-object cmdlet에 연결하여 결과를 필터링할 수 있습니다.?를 어디에 대한 바로 가기로 사용할 수 있습니까?

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

중괄호 내부의 식은 파이프라인의 각 XmlElement에 대해 평가되며 상태가 1인 식만 반환됩니다.$_ 연산자는 파이프라인의 현재 개체(XmlElement)를 참조합니다.

파이프라인의 모든 개체에 대해 작업을 수행해야 하는 경우 각 개체 cmdlet에 개체를 파이프라인의 모든 개체에 대해 블록을 실행할 수 있습니다. %는 각 개체에 대한 바로 가기입니다.

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

파워셸은 이런 일에 아주 능숙합니다.객체의 파이프라인을 조립하고, 파이프라인을 필터링하고, 파이프라인의 각 객체에 대한 작업을 수행하는 것은 정말 쉽습니다.

파일로 시작하려면 다음 작업을 수행할 수 있습니다.

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

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

[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
    }
}

언급URL : https://stackoverflow.com/questions/18032147/parsing-xml-using-powershell

반응형