You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java从XML指定ID的父标签中随机获取ans子标签内容

实现XML匹配的随机应答方法

需求说明

需要完成Java方法String function(String id)的实现,功能如下:

  • 传入id后,在XML文件中找到对应id属性的<question>标签
  • 随机返回该<question>标签下任意一个<ans>标签的内容
  • 若不存在对应id的<question>标签,则返回<default>标签的内容

XML文件内容

<?xml version="1.0"?>  
<class>  
    
  <question  id="scores">
        <ans>12</ans>
        <ans>32</ans>
        <ans>44</ans>
  </question>

  <question  id="ratings">
        <ans>10</ans>
        <ans>22</ans>
        <ans>45</ans>
        <ans>100</ans>
  </question>
<default>
    Sorry wrong
</default>
  </class>  

已有ChatBot类代码

import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;

public class ChatBot {
    
    private String filepath="E:\\myfile.xml";
    private File file;
    private Document doc;

    public ChatBot() throws SAXException, IOException, ParserConfigurationException {
         file = new File("E:\\myfile.xml");  
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
         DocumentBuilder db = dbf.newDocumentBuilder();  
         doc = db.parse(file); 
    }
    
    
    String function(String id){
// 需要补充实现的部分
            return null;
    }
       
}

注:原代码中文件路径的反斜杠需要转义为\\,否则会出现编译错误,已在上述代码中修正

补充实现function方法

import java.util.Random;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

// 在ChatBot类中替换原function方法的实现
String function(String id) {
    // 查找对应id的question标签
    NodeList questionNodes = doc.getElementsByTagName("question");
    Element targetQuestion = null;
    for (int i = 0; i < questionNodes.getLength(); i++) {
        Element question = (Element) questionNodes.item(i);
        if (id.equals(question.getAttribute("id"))) {
            targetQuestion = question;
            break;
        }
    }

    // 找到目标question则随机返回一个ans内容
    if (targetQuestion != null) {
        NodeList ansNodes = targetQuestion.getElementsByTagName("ans");
        if (ansNodes.getLength() > 0) {
            Random random = new Random();
            int randomIndex = random.nextInt(ansNodes.getLength());
            Element ansElement = (Element) ansNodes.item(randomIndex);
            return ansElement.getTextContent().trim();
        }
    }

    // 未找到对应id或无ans节点,返回default内容
    NodeList defaultNodes = doc.getElementsByTagName("default");
    if (defaultNodes.getLength() > 0) {
        Element defaultElement = (Element) defaultNodes.item(0);
        return defaultElement.getTextContent().trim();
    }

    // 极端兜底:连default标签都不存在时返回
    return "Unknown error";
}

关键逻辑说明

  1. 通过DOM API遍历所有<question>节点,匹配传入的id属性,定位目标节点
  2. 找到目标节点后,获取其下所有<ans>子节点,用Random类随机选取一个返回内容(去除首尾空白)
  3. 未匹配到目标节点时,读取<default>标签的内容返回;若<default>标签也不存在,返回兜底提示

内容的提问来源于stack exchange,提问作者Ahtess_ Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 23:35:44