Improve company productivity with a Business Account.Sign Up

x
?
Solved

Parse a string in powershell to take a section of text between two XML tags.

Posted on 2014-04-30
10
Medium Priority
?
12,456 Views
Last Modified: 2014-04-30
Question :
Using powershell, how can I grab a string that sits between two XML tags and assign it to a variable?

Details :
I am parsing text in powershell. The line of text looks something like this:
      <JobName>Commercial</JobName>

I need to save the value between the XML tags as a variable.
In this case the word "commercial" should be saved into the variable.

Notes:
     The text lines will have leading spaces
     The XML tags and the word we want to will vary in length.
     The value between the XML tags may have a space in it.

Examples of the result we'd like :

     String =      <JobName>Commercial</JobName>
     Variable = Commercial

     String =                       <JobDescription>Residential</JobDescription>
     Variable = Residential

     String =            <JobActive>In Progress</JobActive>
     Variable = In Progress
0
Comment
Question by:JasonLattin
  • 5
  • 3
  • 2
10 Comments
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 40032200
You can use a regular expression for that.

<\w+>(.*?)</\w+>

will give you what you need in $1

HTH,
Dan
0
 
LVL 29

Expert Comment

by:becraig
ID: 40032205
Also you can use the below:

$variable = (gc file.xml | select-string -pattern "JobDescription>") -replace 'JobDescription>','' | % { $_.split('<')[1]}

Open in new window

0
 

Author Comment

by:JasonLattin
ID: 40032208
Thanks for the quick answer BECRAIG.
I can't use that syntax because the XML code name is gonna vary with each line and i won't know the values in advance.
0
Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

 
LVL 35

Accepted Solution

by:
Dan Craciun earned 2000 total points
ID: 40032213
$text = "<JobName>Commercial</JobName>"
$a = $text -match "<\w+>(.*?)</\w+>"
$var = $Matches[1]

echo $var

Open in new window

This will print:
Commercial
0
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 40032230
gc file.xml | %{if ($_ -match "<\w+>(.*?)</\w+>") {echo $Matches[1]}}

Open in new window

This should output all the contents that you want.
0
 

Author Closing Comment

by:JasonLattin
ID: 40032234
This worked perfectly!
0
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 40032238
Glad I could help!
0
 
LVL 29

Expert Comment

by:becraig
ID: 40032249
Yup that last comment from Dan should do it then it will do a match for any value between tags, however will you want the content between EVERY tag in the xml doc as a variable  ?

I am trying to figure out if you are assigning dynamic variables here, based on the potential number of entries.
0
 

Author Comment

by:JasonLattin
ID: 40032276
BECRAIG...
What we are doing in actuality is reading an XML config file and using the contents of one xml tag to change the contents of other tags later in the file.
the value we look for is gonna vary so i needed Dan's code to grab the data no matter what the syntax was.
It is a beautiful fix, really. I can leverage that code to do lots of things for us, even beyond the need I have at this moment because we work with these darn config files in a dozen different ways at times.
I am vcery appreciatetive to everyone who participated.
0
 
LVL 35

Expert Comment

by:Dan Craciun
ID: 40032277
He could use a hash and store the tag and its value.
gc file.xml | %{if ($_ -match "<(\w+)>(.*?)</\w+>") {$hash[$Matches[1]] = $Matches[2]}}
0

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.

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

A walk-through example of how to obtain and apply new DID phone numbers to your cloud PBX enabled users that are configured in Office 365. Whether you have 1, 10 or 100+ users in your tenant, it's quite easy to get them phone-enabled and making/rece…
Welcome to 2018! Exciting things lie ahead in the world of tech. To start things off, we compiled great member articles on how to stay safe, ways to learn, and much more! Read on to start your new year right.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

595 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question