0
Hello guys我有以下与xml文件进行通信的代码,找到给定用户的名称,然后更新其令牌值。借助流和lambdas将迭代解决方案转化为功能
XML:
<app>
<user>
<name>Rick Alacidhbccgga Bushaksen</name>
<email>[email protected]</email>
<password>januszek</password>
<accessToken>666666666</accessToken>
<description>User has profile photo only</description>
</user>
<user>
<name>Rick Alacidhbccgga Bushaksen</name>
<email>[email protected]</email>
<password>brajan123</password>
<accessToken>bbb</accessToken>
<description>User doesn not have any photos</description>
</user>
<user>
<name>Rick Alacidhbccgga Bushaksen</name>
<email>[email protected]</email>
<password>ania123</password>
<accessToken>bbb</accessToken>
<description>User has profile and other photos</description>
</user>
</app>
这是我的方法,它可以完成上述:
public static void updateAccessTokenFunctional(FacebookTestUserAccount testUser) {
final String userName = getNameOfTestUser(testUser);
final String tokenValue = testUser.accessToken();
try {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(XML_FILE_NAME);
Node company = doc.getFirstChild();
for (int j = 0; j < doc.getElementsByTagName("user").getLength(); j++) {
Node user = doc.getElementsByTagName("user").item(j);
NodeList listOfChildNodes = user.getChildNodes();
String currentNameOfUser = "";
for (int i = 0; i < listOfChildNodes.getLength(); i++) {
Node node = listOfChildNodes.item(i);
if ("name".equals(node.getNodeName()))
currentNameOfUser = node.getTextContent();
if (currentNameOfUser.equals(userName) && "accessToken".equals(node.getNodeName())) {
node.setTextContent(tokenValue);
}
}
}
// saving content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(XML_FILE_NAME));
transformer.transform(source, result);
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (SAXException sae) {
sae.printStackTrace();
}
}
private static String getNameOfTestUser(FacebookTestUserAccount user) {
String[] arr = user.getUserDetails().split("\"");
return arr[3];
}
它工作正常,但我想将它重构为实用的解决方案(如果可能的话),这是我要求帮助的部分。我曾尝试类似
Stream.of(listOfChildNodes).///?
,但我不能映射它得到单个节点...