mediciones Extracto de nodos XML

nanomader94:

Estoy analizar grandes XMLs utilizando Java 8 y XmlPath 1.0. Quiero extraer, nombre de la prueba , con los valores medidos y el resultado (pasado o no). Cada prueba puede tener muchas TestResult que contiene uno de los dos tipos de límites:

  • SingleLimit, que tendrá una sola <Comparador de límite = "XYZ">
  • LimitPair el cual tendrá siempre dos límites

    <tr:Test ID = "282" name = "DIP1-8 High">  
        <tr:Extension>
            <ts:TSStepProperties>
                ...
            </ts:TSStepProperties>
        </tr:Extension>
        <tr:Outcome value = "Passed" /> <!-- value -->
        <tr:TestResult ID = "xyz" name = "TC 8.7.4 - Current breaker output J10:1-2"> <!-- name -->
        <tr:TestLimits>
            <tr:Limits>
                <c:LimitPair operator = "AND">
                    <c:Limit comparator = "GE">
                        <!-- value -->
                        <c:Datum nonStandardUnit = "V" value = "2.8" xsi:type="ts:TS_double" flags = "0x0000"/> 
                    </c:Limit>
                    <c:Limit comparator = "LE">
                        <!-- value -->
                        <c:Datum nonStandardUnit = "V" value = "3.5" xsi:type="ts:TS_double" flags = "0x0000"/>
                    </c:Limit>
                </c:LimitPair>
            </tr:Limits>
            </tr:TestLimits>
        </tr:TestResult>
    </tr:Test>
    

Actualmente estoy usando estos caminos para extraer mediciones PairLimit y crear valores que contienen la secuencia.

Mi pregunta es ¿cómo debería escribir código / XPaths para cuidar de posibles muchas Resultado de la Pruebas dentro de una prueba.

Me asumido desde el principio que la prueba sólo puede tener PairLimit o SingleLimit, que estaba equivocado. Mi código actual extraer todos los valores correctamente, pero las mediciones asignadas son incorrectos cuando hay muchos Resultado de la Pruebas dentro de prueba.

Por ejemplo, si la prueba ID = 1 contiene 3 (tres) Resultado de la Pruebas entonces en la cadena final que contiene las mediciones, voy a tener valores de primera prueba dentro de segundos, porque va a "de anulación" los valores.

        private ArrayList<String> preparePairLimitPaths() {
    final ArrayList<String> list = new ArrayList<>();
    list.add("//Test[TestResult//LimitPair]/@name");
    list.add("//Test/TestResult[TestLimits//LimitPair]/TestData/Datum/@value");
    list.add("//Test/TestResult/TestLimits/Limits/LimitPair/Limit[*]/Datum/@value");
    list.add("//Test/TestResult/TestLimits/Limits/LimitPair/Limit[*]/Datum/@value");
    list.add("//Test[TestResult//TestLimits//LimitPair]/Outcome/@value");
    return list;
}
for (String expr : preparePairLimitPaths) {
    try {
        final NodeList evaluate = (NodeList) xPath.evaluate(expr, parse, XPathConstants.NODESET);
        for (int i = 0; i < evaluate.getLength(); i++) {
            final String textContent = evaluate.item(i).getTextContent();
            if (textContent != null && !textContent.isEmpty()) {
                stringBuilder.append(textContent).append(";");
            }
        }
        stringBuilder.append("@@@");
    } catch (XPathExpressionException e) {
        e.printStackTrace();
    }
}
mkuligowski:

Usted sólo puede iterar sobre cada prueba y luego iterar sobre cada TestResult y luego poner la lógica con TestLimits etc.

    NodeList allTests = (NodeList) xPath.evaluate("/xml/Test", xmlDocument, XPathConstants.NODESET);
    for (int i = 0; i < tests.getLength(); i++) {
        Element singleTest = (Element) tests.item(i);
        // Here, you can extract some values from your test like:
        // testOutcome = xPath.evaluate("Outcome/@value", singleTest);

        NodeList testResults = (NodeList) xPath.evaluate("TestResult",test, XPathConstants.NODESET);

        for (int j=0; j<testResults.getLength(); j++) {
            // Now you can iterate over all your testResults from test
            // testResultName = xPath.evaluate("@name",testResults.item(j)));
        }
    }

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=206067&siteId=1
Recomendado
Clasificación