Как получить тестовое значение из CDATA в файле xml, используя java - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь получить значение MethodName из узла CDATA в файле xml.
XML файл выглядит как -

<params>
            <param index="0">
              <value>
                <![CDATA[{PackageResponse=./src/test/resources/TestData/ExpectedData/InstantCash/GetAnywherePayoutAgents/ExpectedPackageResponse.json, ProviderRequest=./src/test/resources/TestData/ExpectedData/InstantCash/GetAnywherePayoutAgents/ExpectedProviderRequest.json, ParameterFilePath=./src/test/resources/TestData/RequestParameter/InstantCash/GetAnywherePayoutAgents.json, ProviderResponse=./src/test/resources/TestData/ExpectedData/InstantCash/GetAnywherePayoutAgents/ExpectedProviderResponse.json, MethodName=GetAnywherePayoutAgents}]]>
              </value>
            </param>
          </params>   

То, что я пробовал, только дает мне все текстовое значение этого-
JAVA Code-

public static String getCharacterDataFromElement(Element e) {

        NodeList list = e.getChildNodes();
        String data;

        for(int index = 0; index < list.getLength(); index++){
            if(list.item(index) instanceof CharacterData){
                CharacterData child = (CharacterData) list.item(index);
                data = child.getData();

                if(data != null && data.trim().length() > 0)
                    return child.getData();
            }
        }
        return "";
    }  

Но я хочу только значение methodName из CDATA. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 19 февраля 2020

У вас уже есть метод для получения содержимого CDATA. Для извлечения MethodName или других полей из этого текста может быть реализована пользовательская функция синтаксического анализа, например:

public static String getMethodName(String source, String fieldName) {
        if(source.startsWith("{") && source.endsWith("}")) {
            source = source.substring(1, source.length() - 1);
        }
        return Arrays.asList(source.split(",")).stream()
                .map(s -> s.trim().split("="))
                .filter(s -> fieldName.equals(s[0]))
                .map(s -> s[1])
                .findFirst()
                .orElse(null);
}

Она разбивает текст по запятым, затем разбивает каждый токен по знакам равенства, затем ищет указанное имя поля и возвращает текст после знака равенства (или ноль, если не найден). Это можно назвать следующим образом:

String cdata = getCharacterDataFromElement(element);
String methodName = getMethodName(cdata , "MethodName");
...