Вложенные XML Powershell

У меня есть следующий xml

Следующие powershell читают xml

write-host "'nParsing file SharepointSetUpData.xml'n"
[System.Xml.XmlDocument] $xd = new-object System.Xml.XmlDocument
$file = resolve-path("SharepointSetUpData.xml")
$xd.load($file)
#$nodelist = $xd.selectnodes("/testCases/testCase") # XPath is case sensitive
$nodelist = $xd.selectnodes("/WebApplications/WebApplication") # XPath is case sensitive
foreach ($testCaseNode in $nodelist) {
 $WebAppid = $testCaseNode.getAttribute("id")
 $inputsNode = $testCaseNode.selectSingleNode("SiteCollections")
 $SiteCollection = $inputsNode.selectSingleNode("SiteCollection").get_InnerXml()
 $siteslist = $SiteCollection.selectnodes("Site")
 $optional = $inputsNode.selectSingleNode("SiteCollection").getAttribute("url")
 $arg2 = $inputsNode.selectSingleNode("arg2").get_InnerXml()
 $expected = $testCaseNode.selectSingleNode("expected").get_innerXml()
 #$expected = $testCaseNode.expected 
 write-host "WebApp ID = $WebAppid SiteCollection = $SiteCollection Optional = $optional Arg2 = $arg2 Expected value = $expected"
}

Проблема заключается в линии

$ siteslist = $ SiteCollection.selectnodes("Сайт")

Невозможно найти списки сайтов. Как их найти.

1 ответ

Причина в том, что вы используете свойство InnerXml в строке до, которая возвращает строку. Если вы просто удалите вызов get_InnerXml() в строке выше, он должен работать нормально. С другой стороны, вы можете работать с более простым синтаксисом в PowerShell, если хотите. Так же, как образец различного синтаксиса:

[xml]$xml = Get-Content .\data.xml
$webApplications = $xml.WebApplications.WebApplication
foreach ($application in $webApplications)
{
 $webAppId = $application.id
 $expected = $application.expected
 foreach ($siteCollection in $application.SiteCollections.SiteCollection)
 {
 foreach($site in $siteCollection.Site)
 {
 }
 }
}

licensed under cc by-sa 3.0 with attribution.