2016-03-10 2 views
1

Доброго утраОбъединение XML Документы Checkstyle с одинаковой структурой с помощью заводной

У меня есть несколько отчетов XML Checkstyle с одинаковой структурой, что мне нужно, чтобы объединить в единый документ, документ выглядит следующим образом.

<?xml version="1.0" encoding="UTF-8"?> 
<checkstyle version="6.15"> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/communication/EMailMessage.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/communication/EMailSender.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/communication/SMSMessage.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/communication/package-info.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/InputValidation.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/InputValidationALL.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/InputValidationINTEGER.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/InputValidationTEXT.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/MenuNavigationEvent.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/SubscriberForUSSD.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/USSDMenuItem.java"> 
<error line="327" severity="error" message="Line is longer than 120 characters (found 157)." source="com.puppycrawl.tools.checkstyle.checks.sizes.LineLengthCheck"/> 
<error line="327" column="133" severity="error" message="&apos;,&apos; is not followed by whitespace." source="com.puppycrawl.tools.checkstyle.checks.whitespace.WhitespaceAfterCheck"/> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/USSDMenuItemManager.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/USSDResponse.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/ussd/package-info.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/DateUtils.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/DbUtils.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/Enumerators.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/IDNumberValidator.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/SimpleHTTP.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/TextParser.java"> 
</file> 
<file name="/media/sf_Google_Drive/Development/av_microservice/av_microservice/av_microservice_commons/src/main/java/za/co/av/ms_commons/utils/package-info.java"> 
</file> 
</checkstyle> 

теперь я попытался объединить, используя следующий код

def list = []   
//create new XML file 
File newXMLfile= new File("${rootProject.projectDir}/reports/checkStyleCombined.xml") 
new StreamingMarkupBuilder().bind { 
    mkp.xmlDeclaration([version:'1.0', encoding:'UTF-8', standalone:'no']) 
    checkstyle { 
     //get list of all checkstyle reports 
     def dir = new File("${rootProject.projectDir}/reports/checkstyle") 
     dir.eachFileRecurse (FileType.FILES) { file -> 
      list << file 
     } 
     //itterate though the list 
     list.each { 
      //parse xml file 
      def gPathResult = new XmlSlurper().parse(it) 
      //find all "file" nodes in xml file 
      gPathResult.file.each{ 
       TEST(XmlUtil.serialize(it)) 
       out << it 
      } 
     } 
    } 
}.writeTo(newXMLfile.newWriter("UTF-8")) 

Проблема у меня есть, в два раза, во-первых, кажется, что я не могу использовать метод XmlUtil.serialize написать мой узел, потому что он ставит Объявление XML в каждой строке и форматирование выглядит следующим образом.

<TEST>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;file name="XXXXXX"/&gt; 

Во-вторых вы отметите в файле XML, что есть элемент, называемый файл. Я не могу использовать файл имени в закрытии, потому что файл является зарезервированным словом, поэтому я использую «TEST», но это, очевидно, неправильно. Поэтому мой вопрос прост, кто-нибудь знает, как сделать это более простым способом.

ответ

0

Таким образом, кажется, что подход, который я использовал не был идеальным, так что я сделал используется один из XML-документов в качестве корневого документа и объединить другие документы в ней следующим образом

def list = []  
    //This is for the checkstyle report!!!!!! 
    //create new XML file 
    File newXMLfile= new File("${rootProject.projectDir}/reports/checkStyleCombined.xml") 

    //get list of all checkstyle reports 
    def dir = new File("${rootProject.projectDir}/reports/checkstyle") 
    dir.eachFileRecurse (FileType.FILES) { file -> 
     list << file 
    } 
    //set the root xml document to the first document is the list 
    def root = new XmlSlurper().parse(list.first()) 
    //itterate through the list 
    list.each { 
     if(it != list.first()) 
     { 
      //parse xml file 
      def gPathResult = new XmlSlurper().parse(it) 
      //find all file nodes in xml file 
      gPathResult.file.each{ 
       //append node to root node 
       root.appendNode(it) 
      } 
     } 
    } 
    //write the node to file 
    newXMLfile.withWriter { outWriter -> 
     XmlUtil.serialize(new StreamingMarkupBuilder().bind{ mkp.yield root }, outWriter) 
    } 

Я надеюсь, это помогает кому-то когда-нибудь, поскольку мне потребовалось некоторое время, чтобы понять это.

Смежные вопросы