如何使用 java 从 xml 文件中的 CDATA 获取测试值
How to get test value from CDATA in xml file using java
我正在尝试从 xml 文件中的 CDATA 节点获取 MethodName 值。
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代码-
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 "";
}
但我只想要来自 CDATA 的 methodName 值。请帮忙!
您已经有了检索 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);
}
它按逗号拆分文本,然后按等号拆分每个标记,然后搜索提供的字段名称和等号后的 returns 文本(如果未找到则为空)。可以这样调用:
String cdata = getCharacterDataFromElement(element);
String methodName = getMethodName(cdata , "MethodName");
我正在尝试从 xml 文件中的 CDATA 节点获取 MethodName 值。
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代码-
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 "";
}
但我只想要来自 CDATA 的 methodName 值。请帮忙!
您已经有了检索 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);
}
它按逗号拆分文本,然后按等号拆分每个标记,然后搜索提供的字段名称和等号后的 returns 文本(如果未找到则为空)。可以这样调用:
String cdata = getCharacterDataFromElement(element);
String methodName = getMethodName(cdata , "MethodName");