XML 경로에 대한 변수를 사용하여 PowerShell을 사용하여 XML 파일에서 CDATA를 읽는 방법은 무엇입니까?

Mr. Annoyed

XML의 요소 경로에 변수를 사용하는 경우 CDATA가 포함 된 XML 파일을 읽는 데 어려움을 겪고 있습니다. (참고 : 이것은 PowerShell을 사용하여 XML 파일에서 CDATA를 읽는 방법을 기반으로 합니다. )

$ xmlsource 파일에서

<list>
  <topic>
    <SubTopic>
        <topicTitle>Test</topicTitle>
        <HtmlHead><![CDATA[<br>randomHTMLhere</br>]]></HtmlHead>
    </SubTopic>
    <SubTopic2>
        <topicTitle>Test2</topicTitle>
        <HtmlHead><![CDATA[<br>randomHTMLhere2</br>]]></HtmlHead>
    </SubTopic2>
  </topic>
</list>

PowerShell에서

[String]$xmlsource = "C:\PowerShell_scripts\xmlsource.xml"
[xml]$XmlContent = get-content $xmlsource    

#These methods work but the Paths are HARD-CODED
Write-host "`r`nUsing HARD-CODED Paths"
$XmlContent.list.topic.SubTopic.HtmlHead.'#cdata-section'
$XmlContent.list.topic.SubTopic.HtmlHead.InnerText
$XmlContent.list.topic.SubTopic2.HtmlHead.InnerText

#But if the path is given in a variable, I get nothing.
Write-host "`r`nUsing `$pathToElement (returns blank line)"
[String]$pathToElement = 'list.topic.SubTopic.HtmlHead'
$XmlContent.$pathToElement.InnerText        #This return a blank line


#Insult to injury
#This kinda works but to parse the path to fit in the 'GetElementsByTagName' method would be clunky, inflexible and would still return the CDATA from *both* 'HtmlHead' elements.
Write-host "`r`nwith GetElementsByTagName(`$var)"
[String]$ElementName= 'HtmlHead'
$XmlContent.GetElementsByTagName($ElementName).'#cdata-section'
Write-host "`r`nwith GetElementsByTagName()"
$XmlContent.GetElementsByTagName('HtmlHead').'#cdata-section'

$ pathToElement는 특수 데이터 유형으로 캐스팅해야합니까?

참고 : Xpath는 XML에 대한 쿼리 언어이므로 위의 질문을 수정했습니다.

TessellatingHeckler
$XmlContent.list.topic.SubTopic.HtmlHead 

list라는 속성을 찾은 다음 해당 반환 값에서 'topic'을 찾은 다음 해당 반환 값에서 ... 등을 찾습니다.

$XmlContent.$XpathToElement

이름이 지정된 하나의 속성을 조회하려고 list.topic.SubTopic.HtmlHead하지만 찾지 못합니다.

'list.topic.SubTopic.HtmlHead'가 XPath 표현식에 적합한 형식이라고 생각하지 않습니다. 다음과 같이 할 수 있습니다.

$node = Select-Xml -xml $XmlContent -XPath '/list/topic/SubTopic/HtmlHead' | select -expand node
$node.InnerText

편집 : 그리고

Select-Xml -xml $xml -XPath '/list/topic//HtmlHead'

SubTopic 및 SubTopic2에 대한 HtmlHeads를 모두 가져옵니다.


내 코드 블록에서 자동 생성 된 PS 도움말 링크 (사용 가능한 경우) :

  • Select-Xml(모듈에서 Microsoft.PowerShell.Utility)
  • selectSelect-Object(모듈 내 Microsoft.PowerShell.Utility) 의 별칭입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관