2017-08-08 13 views
0

私は同じ構造を持つ1つのディレクトリに多くのXMLを持っており、HTMLテーブルを生成する必要があります。 1つのCSVファイルを作成する前に、簡単でした。しかし、今私は始める方法がわからない。 XMLファイルのディレクトリへのパスが1つしかないので、XSLTについて何かを読んでいますが、これはどのように使用するのかわかりません。のパスです。複数のxmlファイルを1つのhtmlテーブルに入れよう

をfile1.xml

<test> 
<filename>aa</filename> 
<status>ok</status> 
</test> 

例file2.xml

<test> 
<filename>aa</filename> 
<status>failed</status> 
</test> 

私が必要とするこのようなテーブル:

filename | status1 | status2 | status n 
aaa  | ok | not ok | n 

編集:いくつかの古い作品私のチームの男のコードXMLファイルの内容を見て

public class Main { 
private static ArrayList<TestSection> errors = new ArrayList<TestSection>(); 
private static int errorNum = 1; 

public static void main(String[] args) throws JAXBException, IOException { 
    ArrayList<Test> tests = new ArrayList<Test>(); 
    generateTestObjects(args, tests); 
    createHTML(tests, args[1]); 
} 

private static void generateTestObjects(String[] args, ArrayList<Test> arrayList) throws IOException{ 

    Stream<Path> list = Files.list(Paths.get(args[0])); 

    list.forEach(arg0 -> { 
     try { 
      arrayList.add(unmarshall(arg0.toString())); 
     } catch (JAXBException e) { 
      e.printStackTrace(); 
     } 
    }); 
    list.close(); 
} 
private static Test unmarshall(String fileName) throws JAXBException{ 
    JAXBContext context = JAXBContext.newInstance(Test.class); 
    Unmarshaller un = context.createUnmarshaller(); 
    Test test = (Test) un.unmarshal(new File(fileName)); 
    return test; 
} 

private static void createHTML(ArrayList<Test> arraylist, String filename) throws IOException { 
    File file = new File("xunit.html"); 
    FileWriter writer = new FileWriter(file); 
    writer.write("<!DOCTYPE html>"); 
    writer.write("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); 
    writer.write("<head>"); 
    writer.write("<title>Xunit Report</title>"); 
    writer.write("<meta http-equiv=\"content-Type\" content=\"text/html; charset=UTF-8\" />"); 
    writer.write("</head>"); 
    writer.write("<body>"); 
    writer.write("<h1>Xunit Report</h1>"); 
    createHTMLTable(arraylist, writer); 
    createHTMLTableCSV(filename, writer); 
    writer.write("</body>"); 
    writer.write("</html>"); 
    writer.close(); 
} 

private static void createHTMLTable(ArrayList<Test> arraylist, FileWriter fwriter) throws IOException{ 
    fwriter.write("<table border=\"1\">"); 
    fwriter.write("<tr bgcolor=\"#A9A9F5\">"); 
    fwriter.write("<th style=\"text-align:left\">Test case: </th>"); 
    List<TestSection> testSections = arraylist.stream().map(Test::getTestSection).collect(Collectors.toList()); 
    for(int file=0; file < arraylist.size(); file++){ 
     fwriter.write("<th style=\"text-align:left\">" + arraylist.get(file).getAppInformation().getWorkstationId() + "</th>"); 
    } 
    for(int test=0; test < testSections.get(0).getTests().size(); test++){ 
     fwriter.write("<tr>"); 
     String testName = testSections.get(0).getTests().get(test).getTestName(); 
     testName = testName.replace("<", "&lt"); 
     testName = testName.replace(">", "&gt"); 
     fwriter.write("<td>" + testName + "</td>"); 
     for(int file=0; file < arraylist.size(); file++){ 
      String status = testSections.get(file).getTests().get(test).getStatus(); 
      if(status.equalsIgnoreCase("PASSED")){ 
       fwriter.write("<td bgcolor=\"#00FF00\">" + status + "</td>"); 
      } else{ 
       fwriter.write("<td bgcolor=\"#FF4000\">" +"<a href=\"#"+errorNum+"error\">"+ status + "</a></td>"); 
       errorNum++; 
      } 
     } 
     fwriter.write("</tr>"); 
    } 
    fwriter.write("</table> <br/> <br/>"); 
    for(Test test: arraylist){ 
     int id = 1; 
     if(test.getTestSection().getFailedTests() != null){ 
      for(int i=0;i<test.getTestSection().getFailedTests().size();i++){ 
       String testName = test.getTestSection().getFailedTests().get(i).getTestName(); 
       testName = testName.replace("<", "&lt"); 
       testName = testName.replace(">", "&gt"); 
       fwriter.write("<h4 id=\""+id+"error\">" + testName +"  "+test.getAppInformation().getWorkstationId()+"</h4>"); 
       fwriter.write("<h5>"+ test.getTestSection().getFailedTests().get(i).getDetails()+"</h5>"); 
       id++; 
      } 
     } 
    } 
} 
+0

xmlノード(非常に単純なAPI)を照会するためにXPathを見て、HTMLを構築するにはStringBuilderで十分でしょう。 – davidxxx

+0

Javaを使用して、ディレクトリ内のファイルを一覧表示し、同じ出力ファイルに出力する際に​​[xsltをそれぞれに適用する](https://stackoverflow.com/questions/4604497/xslt-processing-with-java)を使用できます。 – daniu

+1

XSLT 2.0では、 'collection()'関数を使用して、単一のスタイルシートを使用して、指定されたディレクトリ内のすべてのファイルを一度に処理することができます。 –

答えて

0

(それは多くの時間前に書かれた、このレガシーコードのいずれかの醜い行のためにすみません)、私は「テスト」の子要素を持つ単一のXMLファイルを作成し提案します。読書のための今

やパーツを作成、これらのリンクをたどる:SO励ましコミュニティは、ではないのでWrite HTML file using Java

What is the best/simplest way to read in an XML file in Java application?

  • ライティングHTMLファイル:

    1. は、XMLファイルを読み込みますコードを書く場合は、これらのリンクをたどって、あなた自身が役に立つコードを作成する必要があります。

      はい、私たちは皆あなたのコードであなたを助けるためにここにいます。 :-)

  • +0

    upvoteありがとう:-) – Aman

    +0

    ありがとう、私はこれらの記事を読むでしょう。リポジトリに古いコードがいくつか見つかりましたが、それはどのように動作するのか説明できますか(元の投稿を編集します)?このコードの作成者は利用できないので、私は彼に尋ねることもできず、私はJava開発者ではなく、開発者だけです。 – arhu

    +1

    そのコードを掲示し、私たちがそれから抽出できるものをチェックします。 – Aman