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

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.

Related

Call external file from XSL

Can we call an external file (xml, Excel or text file) from XSL?
How do I call SQL Server stored procedures through XSL?
All I am trying to figure out is a way to do mappings from source XML to target XML (let's say if the value of mode vehicle is X in the source, I need to translate it to Y in translate XML based on the mapping stored either in an external file or through a SQL Server stored procedure).
XSLT 1 has the document function (https://www.w3.org/TR/xslt-10/#document) to pull in additional XML documents. Beyond that in XSLT 1 you need to look at extension scripts or elements to deal with other sources, such ways depend on the XSLT processor and/or the programming language or platform (e.g. Java or .NET) it is implemented in.
XSLT 2 in addition to the document function has the doc function for dealing with XML input, it has the unparsed-text function (https://www.w3.org/TR/xslt20/#function-unparsed-text) for text formats and collection (https://www.w3.org/TR/xquery-operators/#func-collection) for input collections. As for SQL, as Saxon 9 on Java is probably the XSLT 2 processor used most, it has in its commercial editions an SQL extension http://saxonica.com/html/documentation/sql-extension/.
XSLT 3 adds support for JSON with functions like parse-json (https://www.w3.org/TR/xpath-functions/#func-parse-json) or json-doc (https://www.w3.org/TR/xpath-functions/#func-json-doc) or json-to-xml (https://www.w3.org/TR/xpath-functions/#func-json-to-xml).
In general I wonder why you need XSLT plus a custom mapping format as in my view template based XSLT in the form
<xsl:template match="foo">
<bar>
<xsl:apply-templates/>
</bar>
</xsl:template>
is the way to declare and implement the mapping. However, if you have a custom mapping, then in all versions of XSLT you can use it create XSLT with XSLT and then run the created XSLT to execute the mapping.

Convert XML to JSON in C language [duplicate]

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.

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?

Decoding the xml to html content from t sql xml column

Earlier,In TSQL we have an XML column to store the html data with xml serialization.
But now we think to keep the html content in CDATA region.
How can I convert the existing xml serialized content to the corresponding html content?
e.g. XML serialized column data : <Node Txt="<b>bold text</b>" />
Expected corresponding transform : <Node><![CDATA[<b>bold text</b>]]></Node>
The above transformation is expected to be carried over by sql script.
I think of a solution to replace all those 5 xml special chars corresponding replacement characters (&,<,>,",etc.). But I dont think string manipulation may work in xml to html transformation.
Any cleaner way or idea to transform those existing xml to html data?
Maybe use the PHP function htmlspecialchars to translate it. If it's a one time thing, this shouldn't be too much trouble for you.
If not, you could code something up using SQL string functions. http://msdn.microsoft.com/en-us/library/ms186862.aspx

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