Не допускать изменения groovy & quot; к "

У меня есть XML, который имеет значение тега, как показано ниже:

<ProjectNote>
    <Note>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;
        &lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;&lt;/TITLE&gt;
        &lt;META http-equiv=Content-Type content=&quot;text/html; charset=unicode&quot;&gt;
        &lt;META content=&quot;MSHTML 6.00.3790.4944&quot; name=GENERATOR&gt;&lt;/HEAD&gt;
        &lt;BODY bgColor=#ffffff&gt;
        &lt;P&gt;Key Deliverables&lt;/P&gt;
        &lt;UL&gt;
        &lt;LI&gt;schedule development 
        &lt;LI&gt;scope development (SOW) 
        &lt;LI&gt;business case (depending on project) 
        &lt;LI&gt;contracts (who will be used) 
        &lt;LI&gt;overall budget 
        &lt;LI&gt;Assign Key Stakeholders 
        &lt;LI&gt;Sitewalks and PreCon Meetings 
        &lt;LI&gt;Need Clearance?&lt;/LI&gt;&lt;/UL&gt;
        &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;
    </Note>
<ProjectNote>

Я читаю этот файл с помощью groovy script, вносю в него некоторые изменения и записываю его обратно в файл. Тем не менее &quot; превращается в " во время анализа файла с помощью XmlSluper. Я не хочу изменять какой-либо другой раздел файла, кроме добавления нового узла к нему. Как я могу сохранить файл как есть?

Я использую следующий код:

package test

import groovy.xml.*
/**
 * A Simple Example that searches information from XML parsed by XmlSlurper.
 */
class Test {
    static srcXMLPath = "C:/SRC_Project/628548_C453_Original.xml"
    static updXMLPath = "C:/SRC_Project/628548_C453_Updated.xml"
    static def writer
    static main(args) {
        File srcFile = new File(srcXMLPath)
        def baseXMLStr = new XmlSlurper(false,false).parse(srcFile)
        def  newXMLStr = new groovy.xml.StreamingMarkupBuilder().bind {
            List_Wrapper {
                mkp.yield baseXMLStr
            }
        }
        writer = new FileWriter(updXMLPath)
        groovy.xml.XmlUtil.serialize( newXMLStr,writer )
        writer.close()

    }
}

Однако обновленный файл изменяется на это, что не является моим намерением:

<ProjectNote>
    <Note>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;    
        &lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;&lt;/TITLE&gt;
        &lt;META http-equiv=Content-Type content="text/html; charset=unicode"&gt;
        &lt;META content="MSHTML 6.00.3790.4944" name=GENERATOR&gt;&lt;/HEAD&gt;
        &lt;BODY bgColor=#ffffff&gt;
        &lt;P&gt;Key Deliverables&lt;/P&gt;
        &lt;UL&gt;
        &lt;LI&gt;As Builts (if needed) 
        &lt;UL&gt;
        &lt;LI&gt;Mapping &amp;amp; Design Drawings&lt;/LI&gt;&lt;/UL&gt;
        &lt;LI&gt;Engineer needs final approval 
        &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;
    </Note>
<ProjectNote>

Может ли кто-нибудь дать мне знать, как этого избежать. это явно не меняет других escape-персонажей

1 ответ

Вы можете исправить это после построения разметки:

new File(updXMLPath) << XmlUtil.serialize(newXMLStr).replaceAll('"', '&quot;')

Но если вы хотите добавить только оболочку, вам не нужно разбирать исходный xml, вы можете добавить исходный файл в разметку следующим образом:

    def  newXMLStr = new StreamingMarkupBuilder().bind {
        List_Wrapper {
            mkp.yieldUnescaped srcFile.text
        }
    }

Наконец, если вам нужно поместить только один тег List_Wrapper, возможно, лучше сделать это:

new File(updXMLPath) << "<List_Wrapper>${new File(srcXMLPath).text}</List_Wrapper>"
Другие вопросы по тегам