• Login
Community
  • Login

XML Tools Plugin - Prettify & Check xml inside CDATA?

Scheduled Pinned Locked Moved Notepad++ & Plugin Development
xml tools
4 Posts 2 Posters 3.9k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J
    Jorge VT
    last edited by Jul 25, 2018, 6:58 PM

    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?

    1 Reply Last reply Reply Quote 0
    • J
      Jorge VT
      last edited by Jul 25, 2018, 7:27 PM

      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.

      1 Reply Last reply Reply Quote 0
      • P
        PeterJones
        last edited by PeterJones Jul 25, 2018, 7:52 PM Jul 25, 2018, 7:50 PM

        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.

        1 Reply Last reply Reply Quote 1
        • P
          PeterJones
          last edited by Jul 25, 2018, 10:00 PM

          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.

          1 Reply Last reply Reply Quote 0
          1 out of 4
          • First post
            1/4
            Last post
          The Community of users of the Notepad++ text editor.
          Powered by NodeBB | Contributors