BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
mnjtrana
Pyrite | Level 9

Hi All,

 

I have an XML file, whcih i want to read in SAS. I tried reading the file through the libname xml engine.

libname myxxml xml 'c:\users\mine\desktop\project.xml';

 

however the same is not accessible, as it needs an XML Mapper file to read it.

 

I have read that XML Mapper is a different software and it will create a xml mapper file which i need to use to read the xml.

 

Can anyone help me if they have any idea how we can create the xml mapper file and read the xml file in the bach mode?

 

Thanks in advance


Cheers from India!

Manjeet
1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User
Not sure if the following could work.

filename xx temp;
libname xx xmlv2 '/folders/myfolders/temp.xml' automap=replace xmlmap=xx ;

libname zz cvp '/folders/myfolders/' cvpmult=2;
proc copy in=xx out=zz noclone;
run;

View solution in original post

10 REPLIES 10
Kalind_Patel
Lapis Lazuli | Level 10

You can create library to read XML files in BASE SAS,

sample libname syntax:

libname out xml 'C:\xml_folder\sample_xml file.xml';

 

For more details please refer this links:

http://www2.sas.com/proceedings/sugi29/119-29.pdf

http://support.sas.com/resources/papers/proceedings12/253-2012.pdf

 

mnjtrana
Pyrite | Level 9

Thanks, but that won't work, as the xml uses xml map. I already had tried and mentioned the same in my original post.

 


Cheers from India!

Manjeet
Patrick
Opal | Level 21

@mnjtrana

The articles @Kalind_Patel posted will give you the necessary details of how you can create such an XMLMap (and you can download the tool itself from the link I've posted in my previous answer).

mnjtrana
Pyrite | Level 9

This is an ongoing process and everytime the xml is different, so everytime a new xml map needs to be generated. also this all needs to be done in batch, non interactive. 

 

So i think the solution suggested won't work,


Cheers from India!

Manjeet
Patrick
Opal | Level 21

@mnjtrana

With any data exchange you need to have defined data structures. In an XML world an XSD (XML Schema Definition) provides such a definition. If you create your XMLMap using an XSD then the XML's you get can vary but as long as they conform with the XSD (which they must to be valid) your XMLMap will work and you will be able to read the data into SAS.

 

If you don't have an XSD then you need to make sure that you use an XML which contains all the data elements possible.

 

There is no other way of making this work and it's on this level also no more SAS specific but would apply to any application parsing the source XML. You need to know what you have to expect (=XSD).

Patrick
Opal | Level 21

You can download the XML mapper from here at no extra cost:

https://support.sas.com/downloads/package.htm?pid=1278

 

You can use an XML as input for the tool to create an XMLMAP but if this is for an ongoing process then make sure that the XML you use for this contains all the elements possible or even better use the related XSD for creation of the XMLMAP.

 

Ksharp
Super User

Try XMLV2 engine. if you are lucky, SAS will generate that MAP for you automatically.

 

filename xx temp;
libname xx xmlv2 '/folders/myfolders/temp.xml' automap=replace xmlmap=xx;
proc copy in=xx out=work noclone;
run;
mnjtrana
Pyrite | Level 9

Thanks @Ksharp that worked, however for a few XML's the data is getting truncated.

 

LOG:

 

WARNING: Data Truncation occured on variable Taskcode Column length=469 Additional length = 603.

 

This is a data length warning. Do we have some option so that all the data can be taken in, instead of truncation.


Cheers from India!

Manjeet
Ksharp
Super User
Not sure if the following could work.

filename xx temp;
libname xx xmlv2 '/folders/myfolders/temp.xml' automap=replace xmlmap=xx ;

libname zz cvp '/folders/myfolders/' cvpmult=2;
proc copy in=xx out=zz noclone;
run;

Patrick
Opal | Level 21

@mnjtrana

If you're implementing for some user triggered process then what @Ksharp proposed is a very acceptable approach, but if you're implementing for a production worthy scheduled batch process then you do need to know your data in advance and I'd call anything not using a pre-defined XML map as sub-standard.

The length issue you've just encountered should give you a hint why I'm making such a strong statement. 

 

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

How to connect to databases in SAS Viya

Need to connect to databases in SAS Viya? SAS’ David Ghan shows you two methods – via SAS/ACCESS LIBNAME and SAS Data Connector SASLIBS – in this video.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 10 replies
  • 10150 views
  • 3 likes
  • 4 in conversation