如何将String[]单索引多值CSV数据转为单Athletes节点XML?
把多个名字塞进单个节点的解决办法
兄弟,你现在的问题明显是代码逻辑走偏了——你应该是遍历每个名字时都生成了完整的
我用Java的DOM API给你写个实际能用的例子,你可以参考这个逻辑适配到你的代码里:
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.StringWriter; public class CsvToXmlConverter { public static void main(String[] args) { // 模拟你的String数组,单个索引存了多个名字 String[] athleteData = {"John Smith, Jane Doe, Jaan Lepp, FooBar"}; // 先把单个索引里的名字拆分成独立的字符串数组 String[] allNames = athleteData[0].split(",\\s*"); // 按逗号+可选空格拆分,自动忽略名字前后空格 try { // 初始化DOM文档 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document xmlDoc = docBuilder.newDocument(); // 创建唯一的根节点 <Athletes> Element rootNode = xmlDoc.createElement("Athletes"); xmlDoc.appendChild(rootNode); // 遍历所有名字,逐个创建<Name>子节点并挂到根节点上 for (String name : allNames) { Element nameNode = xmlDoc.createElement("Name"); nameNode.appendChild(xmlDoc.createTextNode(name.trim())); rootNode.appendChild(nameNode); } // 把DOM文档转换成格式化的XML字符串 TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty("indent", "yes"); // 开启格式化,让XML更易读 DOMSource source = new DOMSource(xmlDoc); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); transformer.transform(source, result); // 输出最终的XML System.out.println(writer.toString()); } catch (Exception e) { e.printStackTrace(); } } }
运行这段代码后,你会得到符合要求的XML:
return (<Athletes> <Name>John Smith</Name> <Name>Jane Doe</Name> <Name>Jaan Lepp</Name> <Name>FooBar</Name> </Athletes> )
几个关键要点:
- 拆分单个索引的名字:用
split(",\\s*")处理逗号分隔的字符串,同时自动忽略名字前后的空格,避免生成带空格的内容。 - 只创建一个根节点:所有
都是 的子节点,而不是每个名字对应一个 。 - 一次性输出完整XML:不要在遍历名字的时候输出XML,等所有子节点都添加完成后,再统一输出整个文档。
如果你用的是其他XML处理库(比如JAXB、StAX),核心逻辑也是一样的——先构建根节点,批量添加子元素,最后统一输出。
内容的提问来源于stack exchange,提问作者Shubham
相关产品推荐
相关产品推荐

