Java读取API返回XML:提取virtualFile元素并拼接信息
Java读取XML中virtualFile子元素的解决方案
假设XML结构示例
先明确你的API返回XML大概结构(如果实际结构不同,调整节点名称即可):
<response> <webUser> <name>Aditya</name> <virtualFileList> <virtualFile> <alias>工作文档</alias> <folderPermissions>read,write</folderPermissions> <path>/company/work/docs</path> </virtualFile> <virtualFile> <alias>个人相册</alias> <folderPermissions>read</folderPermissions> <path>/user/aditya/photos</path> </virtualFile> </virtualFileList> </webUser> </response>
基于DOM解析的实现代码
用Java原生DOM API即可解决,核心是遍历virtualFile节点并提取子元素文本:
import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.ByteArrayInputStream; public class XmlParser { public static void main(String[] args) { // 替换为你的API返回XML字符串 String xmlStr = "<response><webUser><name>Aditya</name><virtualFileList><virtualFile><alias>工作文档</alias><folderPermissions>read,write</folderPermissions><path>/company/work/docs</path></virtualFile><virtualFile><alias>个人相册</alias><folderPermissions>read</folderPermissions><path>/user/aditya/photos</path></virtualFile></virtualFileList></webUser></response>"; try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new ByteArrayInputStream(xmlStr.getBytes())); doc.getDocumentElement().normalize(); // 获取webUser的name Element webUser = (Element) doc.getElementsByTagName("webUser").item(0); String userName = webUser.getElementsByTagName("name").item(0).getTextContent(); System.out.println("用户名:" + userName); // 遍历所有virtualFile节点 NodeList virtualFileList = doc.getElementsByTagName("virtualFile"); for (int i = 0; i < virtualFileList.getLength(); i++) { Element virtualFile = (Element) virtualFileList.item(i); // 提取子元素文本,处理可能的空节点情况 String alias = virtualFile.getElementsByTagName("alias").getLength() > 0 ? virtualFile.getElementsByTagName("alias").item(0).getTextContent() : "无别名"; String permissions = virtualFile.getElementsByTagName("folderPermissions").getLength() > 0 ? virtualFile.getElementsByTagName("folderPermissions").item(0).getTextContent() : "无权限"; String path = virtualFile.getElementsByTagName("path").getLength() > 0 ? virtualFile.getElementsByTagName("path").item(0).getTextContent() : "无路径"; // 按指定格式拼接并输出 System.out.printf("%s\\%s\\%s%n", alias, permissions, path); } } catch (Exception e) { e.printStackTrace(); } } }
关键说明
- 如果你的XML中
virtualFile的父节点不是virtualFileList,替换成实际的父节点名称即可 - 代码中加入了空节点判断,避免因某个子元素缺失导致空指针异常
- 每个
virtualFile对应一行输出,自动实现多文件夹权限的多行展示
内容的提问来源于stack exchange,提问作者Aditya Bhatnagar
相关产品推荐
相关产品推荐

