java读取xml返回标签路径

该代码示例展示了如何在Java中使用JDOM库处理XML文件。它首先清理XML字符串,然后使用SAXBuilder构建Document对象。通过递归函数handleChildren遍历XML元素,生成元素路径并添加到列表中。最后,打印出这些路径。
摘要由CSDN通过智能技术生成
public static void getPathList(String xml, List<String> list) throws IOException, JDOMException {
    if (StringUtils.isNotBlank(xml)) {
        Pattern p = Pattern.compile("\r|\n|\t");
        Matcher m = p.matcher(xml);
        xml = m.replaceAll("");
    }
    //创建一个新的字符串
    StringReader read = new StringReader(xml);
    //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
    InputSource source = new InputSource(read);
    //创建一个新的SAXBuilder
    SAXBuilder sb = new SAXBuilder();
    //通过输入源构造一个Document
    Document doc = sb.build(source);
//---------------------------------------------
//读取xml的那部分:
//1.创建SAXBuilder对象
SAXBuilder saxBuilder = new SAXBuilder();
//2.创建输入流
InputStream is = new FileInputStream(new File("src/main/resources/demo.xml"));
//3.将输入流加载到build中
Document document = saxBuilder.build(is);
//--------------------------------------------
    //取的根元素
Element root = document.getRootElement();
    String rootName = root.getName();
    List<Element> children = (List<Element>) root.getChildren();
    handleChildren(children, rootName, list);
}
public static String handleChildren(List<Element> elementList,String parentName, List<String> list){
    for (Element child : elementList) {
        String name = child.getName();
        List<Element> innerChildren = (List<Element>)child.getChildren();
        if (CollectionUtil.isNotEmpty(innerChildren)){
            handleChildren(innerChildren, new StringJoiner("/").add(parentName).add(name).toString(), list);
        }else {
            list.add(new StringJoiner("/").add(parentName).add(name).add(child.getText().trim()).toString());
        }
    }
    return null;
}
<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom</artifactId>
    <version>1.1</version>
</dependency>

public static void main(String[] args) {
    String xml = "<Person>\n" +
            "\t<name>xmc</name>\n" +
            "\t<address>\n" +
            "\t\t<address1>\n" +
            "\t\t\tbeijing\n" +
            "\t\t</address1>\n" +
            "\t</address>\n" +
            "\t<money>\n" +
            "\t\t<much>\n" +
            "\t\t\t<how>\n" +
            "\t\t\t\t10000000000000\n" +
            "\t\t\t</how>\n" +
            "\t\t</much>\n" +
            "\t</money>\n" +
            "</Person>";
    try {
        List<String> list = new ArrayList<>();
        getPathList(xml, list);
        list.forEach(System.out::println);
    } catch (IOException | JDOMException e) {
        e.printStackTrace();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值