• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1025
  • Last Modified:

Powershell - Parsing xml file

yes, I am back and hopefully with a quick and easy one.

I have an xml file with about ten lines of info.  One line will be very similar to:

The attached code gives me output of:
C:\temp\file.xml:3:  computer1

the c:\temp\file.xml is the source xml file, the 3 is the line number in that file where the string was found .
I only want to see:

I know this should be easy and I have been searching onlilne for a while and had to give in to tossing out some powershell points :-)

what am I missing here?  is there a better way to do this?


$objTXTdbserver =New-item -type file "c:\powershell\OutputFiles\computer.txt" -force
$siteXML = "c:\temp\file.xml"
$dbServerA = select-string -path $siteXML -pattern "<HostName>"

$dbServerb = foreach-object {$dbServera -replace "<hostname>", ""} 
$dbServerb = foreach-object {$dbServerb -replace "</hostname>", ""} 

write-host $dbServerb

Open in new window

  • 2
1 Solution
chadAuthor Commented:
I have gone with using foreach to look at each line for
if ($line -match "HostName"?)

then I used the -replace x 2 to rid the tags.

I looks like it will do what I need but is it the cleanest or best practice?

$siteXML = "c:\temp\File.xml"

$DBX = get-content $siteXML

foreach ($line in $DBX)
   { if ($line -match "<HostName>?")
         $HostName = $line -replace "<hostname>", ""
         $HostName = $HostName -replace "</hostname>", ""
         $HostName = $HostName -replace " ", ""
        write-host $HostName

Open in new window

Chris DentPowerShell DeveloperCommented:

It depends really...

You could do this:

Get-Content $siteXML |
  Where-Object { $_ -Match '<Hostname>' } |
  ForEach-Object { $_ -Replace '<\/?hostname>|\s' }

Or you could read the file as XML, .NET has a lot of XML handling components, so if you want more than Hostname you can do more.


PS it's early in the morning, I'm hoping it's not too early for me to get the regular expressions above right.
chadAuthor Commented:
I guess that is really what I am looking for.  I was up late on my end working on this and searching online for 'powershell parse txt'.  If I did a google search for 'powershell parse xml' I would have found what I am really after. I like the parsing as XML results much better.  I know I will be using more down the line. Now, I need to look into decrypting a file using another application so that the file can be read as xml.

BTW, what you posted above also worked great.  I will save that for an ini file I will need to probe.


Lesson to be learned here: Don't drink and code!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Making Bulk Changes to Active Directory

Watch this video to see how easy it is to make mass changes to Active Directory from an external text file without using complicated scripts.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now