How to locate a string within XML tags
Moderators: Dorian (MJT support), JRL
-
- Junior Coder
- Posts: 25
- Joined: Sun Dec 15, 2013 9:27 pm
How to locate a string within XML tags
Hello
I hope some-one can help with my question.
I am using SOAP to process some data entry. I want to use Macro Scheduler to run a SOAP project and then locate a string within an XML tag and copy the string to the clipboard. An example of the SOAP response is attached.
I want to try to find and copy the string within the tag <mac:MACValue.....> which in the example file attached is:
LugOc5uw+tMjwl7s502fS2V4lzi6Pv0mguCkGIOpvWU=
If anyone can offer some advice I would greatly appreciate it.
Kind regards
Trevor Hughes
I hope some-one can help with my question.
I am using SOAP to process some data entry. I want to use Macro Scheduler to run a SOAP project and then locate a string within an XML tag and copy the string to the clipboard. An example of the SOAP response is attached.
I want to try to find and copy the string within the tag <mac:MACValue.....> which in the example file attached is:
LugOc5uw+tMjwl7s502fS2V4lzi6Pv0mguCkGIOpvWU=
If anyone can offer some advice I would greatly appreciate it.
Kind regards
Trevor Hughes
Re: How to locate a string within XML tags
Hi, one way could be to use RegEx to extract it:
(If you are new to RegEx then what it does is, look for <mac:MACValue followed by any character until "> then discard what you found (using \K) and look for any new character up until you find </, ie this will give your target string)
Code: Select all
ReadFile>C:\...\Example.xml,strFileContents
Let>tmp0=<mac:MACValue.+?">\K.+?(?=</)
RegEx>tmp0,strFileContents,0,m,nm,0
PutClipBoard>m_1
MDL>Just added to clipboard: %m_1%
Re: How to locate a string within XML tags
... and another way could be to use XMLParse>
Code: Select all
LabelToVar>Test,sXML
StringReplace>sXML,soapenv:,,sXML
StringReplace>sXML,mac:,,sXML
Let>tmp0=Envelope/Body/MACValue/text()
XMLParse>sXML,tmp0,val,numBooks
PutClipBoard>val
MDL>Just added to clipboard: %val%
/*
Test:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"/>
</soapenv:Header>
<soapenv:Body>
<mac:MACValue xmlns:mac="http://somewebsite.govt.nz/jbms/msggate/MAC_Generation">LugOc5uw+tMjwl7s502fS2V4lzi6Pv0mguCkGIOpvWU=</mac:MACValue>
</soapenv:Body>
</soapenv:Envelope>
*/
-
- Junior Coder
- Posts: 25
- Joined: Sun Dec 15, 2013 9:27 pm
Re: How to locate a string within XML tags
Thank you very much for the replies.
I am very keen to put these into a script as it will be a great time saver.
Kind regards
Trevor
I am very keen to put these into a script as it will be a great time saver.
Kind regards
Trevor
-
- Junior Coder
- Posts: 25
- Joined: Sun Dec 15, 2013 9:27 pm
Re: How to locate a string within XML tags
Hello
Just a follow on question.
The script I'm hoping to build will have the SOAP project on screen and therefore what I would like to do is to locate the string within the XML Tags. Given the solutions kindly provided, I'm not sure how to apply these to an on-screen file rather than calling the XML file itself.
Please excuse my ignorance in this area.
Kind regards
Trevor
Just a follow on question.
The script I'm hoping to build will have the SOAP project on screen and therefore what I would like to do is to locate the string within the XML Tags. Given the solutions kindly provided, I'm not sure how to apply these to an on-screen file rather than calling the XML file itself.
Please excuse my ignorance in this area.
Kind regards
Trevor
- Marcus Tettmar
- Site Admin
- Posts: 7395
- Joined: Thu Sep 19, 2002 3:00 pm
- Location: Dorset, UK
- Contact:
Re: How to locate a string within XML tags
XMLParse works against a string not a file.
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar
Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar
Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?
-
- Junior Coder
- Posts: 25
- Joined: Sun Dec 15, 2013 9:27 pm
Re: How to locate a string within XML tags
I now have the value within the XML tag extracted to the clipboard, thanks to the help provided. The next step is to paste this value with the Authentication tag of another soap script (see below). Can someone help me with this. Doing it manually I would open the other SOAP project, generate the MACValue and copy it, open the second project and paste the generated MACValue between the Authentication tag.
All help would be greatly appreciated.
All help would be greatly appreciated.
Code: Select all
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://somewebsite.govt.nz/jbms/msggate/dochdr/v2">
<soapenv:Header/>
<soapenv:Body wsu:Id="id-5" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<v2:DocumentManifest>
<NumberOfItems>1</NumberOfItems>
<ManifestItem>
<Type>DEC</Type>
<MimeTypeQualifierCode>text/xml</MimeTypeQualifierCode>
<UniformResourceIdentifier>HERA.xml</UniformResourceIdentifier>
<Authentication>xHHAEF25c3V0Pc65TakchJ3nkkdmJ/7ubXKIGl+jrjM=</Authentication>
</ManifestItem>
</v2:DocumentManifest>
</soapenv:Body>
</soapenv:Envelope>
Re: How to locate a string within XML tags
Hi, probably better as new topic. However, I only have time to reply now so ... If you have the info in the ClipBoard and just want to replace the section in the string then one alternative could be...
(Go through the string and search for text between <Authentication> and </Authentication>. When found replace it with the contents from the ClipBoard and put the overall result into String1)
(Go through the string and search for text between <Authentication> and </Authentication>. When found replace it with the contents from the ClipBoard and put the overall result into String1)
Code: Select all
GetClipBoard>tmpClip,0
LabelToVar>tmpString,String0,1,0,{"*/"}
Let>tmp0=(?<=<Authentication>).+?(?=</Authentication>)
RegEx>tmp0,String0,0,m,nm,1,tmpClip,String1
MDL>String1
/*
tmpString:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://somewebsite.govt.nz/jbms/msggate/dochdr/v2">
<soapenv:Header/>
<soapenv:Body wsu:Id="id-5" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<v2:DocumentManifest>
<NumberOfItems>1</NumberOfItems>
<ManifestItem>
<Type>DEC</Type>
<MimeTypeQualifierCode>text/xml</MimeTypeQualifierCode>
<UniformResourceIdentifier>HERA.xml</UniformResourceIdentifier>
<Authentication>xHHAEF25c3V0Pc65TakchJ3nkkdmJ/7ubXKIGl+jrjM=</Authentication>
</ManifestItem>
</v2:DocumentManifest>
</soapenv:Body>
</soapenv:Envelope>
*/