Не удалось получить последний узел узла xml правильно - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть 2 различных xml файла с. В настоящее время я пытаюсь получить узел Last xml. В первом выводе я получаю, потому что пустое или нулевое значение, так как у меня есть закомментированная строка. Пожалуйста, помогите, как обработать в этом случае.

#Below line Run firstfile.xml
$xmlfile = 'C:\Programs\MyTasks\TCPROD-29658\Test_1309\D_SimulationTest\firstfile.xml'
#Below line to Run secondfile.xml
#$xmlfile = 'C:\Programs\MyTasks\TCPROD-29658\Test_1309\D_SimulationTest\secondfile.xml'

$xmllastsitenode = [xml]::new() 
$xmllastsitenode.Load($xmlFile)
$lastsite_id = $xmllastsitenode.fccconfig.fccdefaults.LastChild.id
write-host 'Print1'
write-host $lastsite_id
if (!$lastsite_id) { Write-Host "variable is null" }
if ($lastsite_id) { Write-Host "variable is NOT null" }
write-host 'Print2'

Ниже xml файлов, которые я пытаюсь запустить

1st XML file

<?xml version="1.0" encoding="UTF-8"?>
<fccconfig version="1.3.2">
   <fccdefaults>
      <property name="CacheLocation" value="C:/Users/Public/" overridable="true"/>
      <site id="-1940805554" overridable="true">
         <parentfsc address="http://abcdefgh:1234/" priority="0" />
      </site>
      <!--__ANT_MARK__-->   

   </fccdefaults>
   <!-- default parentfsc - this is a marker that will be overwritten by the installer -->
   <parentfsc address="xyzlmnopq:10010" priority="0" transport="lan"/>
</fccconfig>

Вывод : -

Print1

переменная равна нулю Print2

2nd XML file

<?xml version="1.0" encoding="UTF-8"?>
<fccconfig version="1.3.2">
   <fccdefaults>
      <property name="CacheLocation" value="C:/Users/Public/" overridable="true"/>
      <site id="-1940805554" overridable="true">
         <parentfsc address="http://abcdefgh:1234/" priority="0" />
      </site>

   </fccdefaults>
   <!-- default parentfsc - this is a marker that will be overwritten by the installer -->
   <parentfsc address="xyzlmnopq:10010" priority="0" transport="lan"/>
</fccconfig>

Вывод: -

Print1 - Переменная 1940805554 НЕ является нулевой. Print2

Последний код, который пробовал тем временем

#Below line Run firstfile.xml
$xmlfile = 'C:\Programs\MyTasks\TCPROD-29658\Test_1309\D_SimulationTest\firstfile.xml'
#Below line to Run secondfile.xml
#$xmlfile = 'C:\Programs\MyTasks\TCPROD-29658\Test_1309\D_SimulationTest\secondfile.xml'

$xmllastsitenode = [xml]::new() 
$xmllastsitenode.Load($xmlFile)
$lastsite_id = $xmllastsitenode.fccconfig.fccdefaults.LastChild.id
write-host 'Print1'
write-host $lastsite_id
if (!$lastsite_id) 
{
     Write-Host "variable is null" 
     # New logic to handle firt xml file cases
     #$somesitetag ---> Having some xml tag content here
     $newSiteNode = $xmlcontent.ImportNode($somesitetag, $true)
     $antmarkline = (Get-Content $xmlfile) | select-string -Pattern $antmark
     $xmlcontent.fccconfig.fccdefaults.InsertAfter($newSiteNode,$antmarkline)
}

if ($lastsite_id)
{
    Write-Host "variable is NOT null"
    #Insterting some new nodes
    #This Working as second file conetent works here
}
write-host 'Print2'

1 Ответ

1 голос
/ 28 апреля 2020

Вы должны игнорировать комментарии. Проверьте вывод этого для первого XML файла.

$settings = [System.Xml.XmlReaderSettings]::new()
$settings.IgnoreComments = $true
$xmlreader = [System.Xml.XmlReader]::Create('./Desktop/Test.xml', $settings)
$xmldoc = [System.Xml.XmlDocument]::new()
$xmldoc.Load($xmlreader)
$xmldoc.fccconfig.fccdefaults.LastChild
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...