У меня просто есть динамический XML-файл со значениями, как показано ниже:
<testCaseId>CSPDDataObject [testCaseId=US_KINDLE_22, description=RISK with AUTH-fulfillment phase]</testCaseId>
<message>Some logger details</message>
<exception>java.lang.AssertionError: expected [true] but found [false]</exception>
Полная структура XML:
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?>
<FailedDetails>
<FailedMessage>
<testCaseId>US_KINDLE_TC1</testCaseId>
<message> some logger</message>
<exception>java.lang.AssertionError: expected [true] but found [false]
</exception>
</FailedMessage>
<FailedMessage>
<testCaseId>US_KINDLE_TC2</testCaseId>
<message> some logger</message>
<exception>java.lang.AssertionError: expected [true] but found [false]
</exception>
</FailedMessage>
......(n) (It repeats 'n' times)
</FailedDetails>
Я просто хочу добавить эти значения в существующий отправляемый по электронной почте отчет testNG в следующих тегах:
<h3> </h3><table> <tr> <td> need to append the above one with respective tag value</td></tr></table>
Скриншот:
Это образец моментального снимка для существующего представления HTML. Я просто хочу добавить значения xml рядом с этими тегами.
Образец отчета для отправки по электронной почте:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml"><head><title>TestNG Report</title><style type = "text/css">table {margin-bottom:10px;border-collapse:collapse;empty-cells:show}th,td {border:1px solid #009;padding:.25em .5em}th {vertical-align:bottom}td {vertical-align:top}table a {font-weight:bold}.stripe td {background-color: #E6EBF9}.num {text-align:right}.passedodd td {background-color: #3F3}.passedeven td {background-color: #0A0}.skippedodd td {background-color: #DDD}.skippedeven td {background-color: #CCC}.failedodd td,.attn {background-color: #F33}.failedeven td,.stripe .attn {background-color: #D00}.stacktrace {white-space:pre;font-family:monospace}.totop {font-size:85%;text-align:center;border-bottom:2px solid #000}</style></head><body><table><tr><th>Test</th><th># Passed</th><th># Skipped</th><th># Failed</th><th>Time (ms)</th><th>Included Groups</th><th>Excluded Groups</th></tr><tr><th colspan = "7">TransferMoney-Suite</th></tr><tr><td><a href = "#t0">KindleReaderTest</a></td><td class = "num">41</td><td class = "num">0</td><td class = "num attn">17</td><td class = "num">10,316,154</td><td></td><td></td></tr><tr class = "stripe"><td><a href = "#t1">Suite setup and teardown</a></td><td class = "num">0</td><td class = "num">0</td><td class = "num">0</td><td class = "num">2,521</td><td></td><td></td></tr><tr><th>Total</th><th class = "num">41</th><th class = "num">0</th><th class = "num attn">17</th><th class = "num">10,318,675</th><th colspan = "2"></th></tr></table><table><thead><tr><th>Class</th><th>Method</th><th>Start</th><th>Time (ms)</th></tr></thead><tbody><tr><th colspan = "4">TransferMoney-Suite</th></tr></tbody><tbody id = "t0"><tr><th colspan = "4">KindleReaderTest — failed</th></tr><tr class = "failedeven"><td rowspan = "17">com.amazon.e2e.device.os22</td><td><a href = "#m0">KindleReaderTest</a></td><td rowspan = "17">1540236982369</td><td rowspan = "17">116625</td></tr><tr class = "failedeven"><td><a href = "#m1">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m2">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m3">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m4">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m5">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m6">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m7">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m8">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m9">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m10">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m11">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m12">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m13">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m14">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m15">KindleReaderTest</a></td></tr><tr class = "failedeven"><td><a href = "#m16">KindleReaderTest</a></td></tr><tr><th colspan = "4">KindleReaderTest — passed</th></tr><tr class = "passedeven"><td rowspan = "41">com.amazon.e2e.device.os22</td><td><a href = "#m17">KindleReaderTest</a></td><td rowspan = "41">1540241421467</td><td rowspan = "41">218092</td></tr><tr class = "passedeven"><td><a href = "#m18">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m19">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m20">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m21">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m22">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m23">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m24">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m25">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m26">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m27">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m28">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m29">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m30">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m31">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m32">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m33">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m34">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m35">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m36">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m37">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m38">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m39">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m40">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m41">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m42">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m43">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m44">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m45">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m46">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m47">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m48">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m49">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m50">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m51">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m52">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m53">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m54">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m55">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m56">KindleReaderTest</a></td></tr><tr class = "passedeven"><td><a href = "#m57">KindleReaderTest</a></td></tr></tbody><tbody id = "t1"></tbody></table><h2>KindleReaderTest</h2><h3 id = "m0">com.amazon.e2e.device.os22#KindleReaderTest</h3><table class = "result"><tr class = "param"><th>Parameter #1</th></tr><tr class = "param stripe"><td>CSPDDataObject [testCaseId=US_KINDLE_22, description=RISK with AUTH-fulfillment phase]</td></tr><tr><th>Messages</th></tr><tr><td><div class = "messages">{
SOME LOGGER MESSAGE GOES HERE
}</div></td></tr><tr><th>Exception</th></tr><tr><td><div class = "stacktrace">java.lang.AssertionError: expected [true] but found [false]
</div></td></tr></table><p class = "totop"><a href = "#summary">back to summary</a></p>
<h2>Suite setup and teardown</h2></body></html>
Любые зацепки ...
Вы просто хотите поместить вводимый xml в td или хотите, чтобы каждый столбец был отдельным td?
Это простые HTML-теги отчетов, отправляемые по электронной почте. Я просто хочу добавить весь xml в <tbody>. <td> мне нужно вставить каждый тег из XML. Как и первый <td> testcaseId </td>, второй <message> и <exception>
Нужна еще одна деталь, как повторяется <testCaseId>? Можете ли вы обновить вопрос с помощью двух значений тестового набора и родительского тега? так что мы можем сделать xsl для повторяющихся строк с тегом tr
Обновил детали.
Можете ли вы обновить html, к которому нужно добавить несколько данных? где это нужно обновить. Выше не ясно
да. Я собираюсь обновить свой вопрос с помощью html
Позвольте нам продолжить обсуждение в чате.
прикрепил отчет. Я просто хочу добавить значения xml сразу после <table class = "result"> <tr class = "param"> <th> Parameter # 1 </th> </tr> <tr class = "param stripe"> <td> CSPDDataObject [testCaseId = US_KINDLE_22, description = РИСК с этапом выполнения AUTH] </td> </tr> <tr> <th> Сообщения </th> </tr> <tr> <td> <div class = "messages"> {ЗДЕСЬ НАХОДИТСЯ НЕКОТОРЫЕ СООБЩЕНИЕ ОТ РЕГИСТРАТОРА} </div> </td> </tr> <tr> <th> Исключение </th> </tr> <tr> <td> <div class = " stacktrace "> java.lang.AssertionError: ожидалось [true], но найдено [false] </div> </td> </tr> </table>
Этот xslt будет читать html-файл и добавлять xml-узлы после table [@ class = 'result']. При обработке HTML-кода тип документа вызовет ошибку. Поэтому перед запуском xlst удалите первую строку в html.
XLS файл
<?xml version = "1.0"?>
<xsl:stylesheet version = "2.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"
xmlns = "http://www.w3.org/1999/xhtml"
xpath-default-namespace = "http://www.w3.org/1999/xhtml">
<xsl:output method = "html" indent = "yes" omit-xml-declaration = "yes"
doctype-public = "-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system = "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />
<xsl:param name = "failedxml.outputDir" />
<xsl:template match = "@* | node()">
<xsl:copy>
<xsl:apply-templates select = "@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:variable name = "doc" select = "document($failedxml.outputDir)" />
<xsl:template match = "body/table[@class='result']">
<xsl:copy-of select = "."/>
<xsl:for-each select = "$doc/node()/child::element()">
<table class = "result">
<tr class = "param">
<th>Parameter #1</th>
</tr>
<tr class = "param stripe">
<td> <xsl:value-of select = "child::element()[1]"/></td>
</tr>
<tr>
<th>Messages</th>
</tr>
<tr>
<td>
<div class = "messages"><xsl:value-of select = "child::element()[2]"/></div>
</td>
</tr>
<tr>
<th>Exception</th>
</tr>
<tr>
<td>
<div class = "stacktrace"><xsl:value-of select = "child::element()[3]"/></div>
</td>
</tr>
</table>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Я использовал Gradle, например,
configurations{ xslt }
dependencies {
xslt 'net.sf.saxon:saxon:8.7'
}
task generateReport << {
File reportDir=new File("${projectDir}/HTML_Reports")
if (reportDir.exists()){
reportDir.deleteDir()
}
reportDir.mkdir()
File emailreport=new File("${projectDir}/emailable-report.html")
// Write some script to remove DOCTYPE from html file before running xslt.
ant.xslt(in: "${testReportDir.absolutePath}/emailable-report.html",
style: "${projectDir.absolutePath}/merge_html.xsl",
out: "${reportDir.absolutePath}/index.html",
classpath: configurations.xslt.asPath) {
param(name: 'failedxml.outputDir', expression: "${projectDir.absolutePath}/failedtest.xml")
}
Позвольте мне прикрепить отчет, отправленный по электронной почте
Я обновил файл xsl. Напишите сценарий для удаления типа документа из отправляемого по электронной почте HTML-кода, чтобы игнорировать ошибку преобразователя dtd.
Большое спасибо за ваш ответ. Позвольте мне это проверить. Можно ли запустить MAVEN вместо Gradle?
Да, используйте этот плагин. mojohaus.org/xml-maven-plugin/examples/transform-saxon.html. Вы должны сказать спасибо, проголосовав за :)
Напишите сценарий для удаления DOCTYPE из редактируемого файла HTML перед запуском xslt.
Можете ли вы добавить именно тот HTML-код, который вы ищете, из xml?