XML Tools Plugin - Prettify & Check xml inside CDATA?



  • I have a format of XML file that essentially contains XML data inside CDATA tags.

    Example:

    <Configuration Name=“MacroName”>
    <Value><![CDATA[<Macro>
    <TagOne Name=“Uno”/>
    </Macro>]]></Value>

    (but tens of thousands of lines)

    Are there any settings I could set in the XML Tools plugin that would Check (and preferably prettify) the XML data inside the CDATA[] tags as well as the actual wrapping XML?



  • Not that it needs to be more complicated, but not all the text in the CDATA[] fields is XML. Some is just plain text and variables.



  • My guess is that the answer is no, though I’m not an XML Tools Plugin guru (in fact, I rarely use it).

    However, as an outsider’s suggestion, I would try the following three step process

    1. Search and Replace (non-regular-expression) <![CDATA[ to ∠∠, and ]]> to ⟂⟂ (where ∠∠ and ⟂⟂ were chosen as character sequences not likely in your document; if they are, pick some different delimiter
    2. Since the CDATA markers are out of the way, XML Tools should validate and/or prettify the internal contents along with the structured
    3. Search and Replace ∠∠ back to <![CDATA[, etc.

    You might be able to get away with <was:CDATA> and </was:CDATA>, though I don’t know whether that would validate properly; I am not an XML expert.

    Failing that, I would use a real XML tool to extract the CDATA; then run that extracted text through the prettify/validate; then repopulate the CDATA contents with the results. (less automatic, less fully contained in Notepad++/XML-Tools, but possibly easier to implement, if my three-step doesn’t work).

    Personally, if the search/replace wasn’t sufficient, I would do that whole process in a single Perl script, using one of the XML modules in CPAN, like XML::LibXML or XML::Twig for the CDATA extraction and insertion, and piping through some external executable to get the prettification. Others here could probably recommend equivalent Python modules/packages/whatever-they’re-called. One benefit of a Python solution would be that you might be able to do it fully within the PythonScript plugin for Notepad++, so keeping it more contained.

    Ooh, I just thought of something: Can XML Tools be told to just prettify or validate a particular selection, rather than the whole document? If so,

    1. search for something like this regular-expression: (?s)<![CDATA[\K.*?(?=]]>) (that appears to highlight the contents of an individual CDATA section
    2. apply the XML Tools prettify or validate on just that selection
    3. find-next and repeat on the next selection, ad infinitum

    -----
    update: by “regular expression”, I mean enable the ☑ Regular Expression option in the find or replace dialog window; by “non-regular-expression”, I mean enable the ☑ Normal option.



  • As a follow on, I found a couple minutes to play a bit with the pretty-print and validate: the pretty-print does seem to work on a selection; the validate seemed to use the whole document, even when I just had the small segment selected. Though since I’m not good at XML, I could be wrong in my interpretation.

    However, while the XML Tools pretty-print does work with individual selections, I had forgotten you said there may be thousands, which means it won’t be very efficient. I think the three-step search+replace/xml tools/search+replace is probably the best in-Notepad++ option.


Log in to reply