Convert XML to JSON in C language [duplicate] - c

I've been searching to no avail for a set of routines to do conversion between JSON and XML. I have found such routines in Javascript, Java, PHP, and Python, but not in C or C++.
FWIW, my json library is json-spirit. I am currently processing JSON, and would like to add XML support via a conversion layer (convert incoming messages from XML to JSON, process them, convert results back to XML, and them out).
Does anyone have any pointers?
I've also seen a number of references to badgerfish, rayfish, rabbitfish... encoding conventions, but they seem to point to dead URLs. Is there a reference somewhere which describes each convention?
And yes, I've checked on json.org.

By far, the only specifically designed C++ library that directly converts XML to JSON I found on the Internet is xml2json: https://github.com/Cheedoong/xml2json
You can also convert JSON to XML if following the same rules.

Boost.PropertyTree handles both JSON and XML. There are some quirks in their implementations, so it wouldn't be a direct transformation, but it shouldn't need much work to adapt a property_tree between JSON and XML.

You could write a xslt for your xml document to convert to json. But I see no standard jslt for converting json.

Related

C program to filter elements of type anyURI from string XML using XSLT

I have a XML string, I want to apply XSLT string on this XML to filter elements of type anyURI.
I am interested to use libxslt. But It transforms the xml present in file. I want to transform xml string.
How to write a C program to transform this xml string?
In terms of XSLT, libxslt is an XSLT 1.0 processor so it doesn't support W3C schema types like xs:anyURI in XSLT, you would need to use an XSLT 2 or 3 processor. Therefore I am not sure how you expect your XSLT program, whether you have it in a file or in a string, to filter out elements of type xs:anyURI.
In terms of C, I guess, depending on your "string" representation, you need to use http://www.xmlsoft.org/html/libxml-parser.html#xmlReadMemory or xmlReadDoc to get an http://www.xmlsoft.org/html/libxml-tree.html#xmlDocPtr for both the XML "string" input and the XSLT "string" input and then the libxslt APIs allow you to use http://xmlsoft.org/XSLT/html/libxslt-xsltInternals.html#xsltParseStylesheetDoc to get an xsltStylesheetPtr and then to run xsltApplyStylesheet.

DocViewProperty XML Serialization

DocViewProperty#format can be used to serialize a Java string to the JCR docview XML format. However, the output of that method still appears to respect carriage-return/line-feed rather than using a hex escaped control char. This means that even after I use DocViewProperty#format, I won't necessarily get the same String as what may show up in a .content.xml file in a CQ5 package -- where that whitespace is escaped. What in the serialization mechanism performs that work and how can I use that rather than rolling up a close approximation of it on my own?

Reading data from an XML file using C

This is follow-up to:
using xslt to create an xml file in c
<element1 type="type1" name="value1">
<start play="no"/>
<element2 aaa="AAA"/>
<element2 bbb="BBB"/>
<element3 ccc="CCC">
<element4/><!-- play="no"/>-->
</element3>
</element1>
Lets say I get this xml file, how do I read individual nodes? I mean, not all nodes are mandatory. Do I need to go though all nodes via "libxml2" or something similar and read its values? OR I can use some sort of schema to define what my xml can look like? What is a better way of dealing with this problem?
A schema is never a bad idea, however it won't help you read the xml as such. All schema would do given you validate the xml against it is tell you it follows whatever rules are in there.
For the rest of it, a quick search on here would have found this. How can libxml2 be used to parse data from XML?

extract url from xml response

I need to extract url from XML response. Here is the XML response:
<cloud xmlns:xlink="http://www.w3.org/1999/xlink">
<rootContainer xlink:href="https://api.example.net/v2/bucket/92FBC29C-344C-99CF-827E-1B5586A7F8E3"
xlink:type="simple"/>
</cloud>
I'm using C to write regex. Need help.
my output needs to be https://api.example.net/v2/bucket/92FBC29C-344C-99CF-827E-1B5586A7F8E3
You shouldn't. If you have the option, you should use an XML processor for any number or reasons.
But if you must, you can do something like "rootContainer.xlink:href=\"([^\"]+)\" Syntax may vary depending on what regex library you're using - there isn't a single "regex" syntax.

How to escape special characters when retrieving data from database?

I am going to generate XML file based on the data returned from SQL Server, but there are some special characters like  and  (there may be other characters like these), which will fail the XML.
Is there any way to escape them?
Thanks!
The control characters U+001C (file separator) and U+001F (unit separator) are not legal to include in an XML 1.0 document, whether verbatim or encoded using a &#...; numeric character reference.
They are allowed in XML 1.1 documents only when included as a character reference. However, XML 1.1 is not nearly as widely accepted as 1.0, and you can't have U+0000 (null) even as a character reference, so it's still not possible to put arbitrary binary data in an XML file — not that it was ever a good idea.
If you want to include data bytes in an XML file you should generally be using an ad hoc encoding of your own that is accepted by all consumers of your particular type of document. It is common to use base64 for the purpose of putting binary data into XML. For formats that do not accommodate any such special encoding scheme, you simply cannot insert these control characters.
What is the purpose of the control characters?
The exact same way you're escaping any other user-supplied input prior to insertion into a database; probably one of (from worst to best):
Escaping control characters prior to construction of an SQL statement
Use of parameterised queries
Use of a DAO or ORM which abstracts this problem away from you
Use parametrized queries and you won't have to worry about escaping. Can't really give you more help as to how to use them unless you mention which language you're using.
Well, I just use the pattern matching stuff to replace those special characters manually. Match for '&#.+?;'

Resources