热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将XML解析器转换为自定义格式

我有以下输入内容:<soapenv:Envelopexmlns:soapenv"http:schemas.xmlrest.orgsoapen

我有以下输入内容:




1234545


9999999




000899



在这种情况下,必须遵循以下输出:

| Envelope.Header.messageIdHeader.0.messageId | 1234545 |
| Envelope.Header.messageIdHeader.1.messageId | 9999999 |
| Envelope.Body.getclientRequest.caid | 0008997 |

我已经尝试使用DOM进行了一些操作,但仍然没有得到所需的结果。
问题是何时调用方法getNextSiblings.getnodename()/ getPreviousSiblings.getnodename()方法。他们没有返回标签的名称,而是一些废话。而且我不知道哪个元素具有兄弟姐妹。简单地说,我需要索引具有同级元素的元素,但是我不知道该怎么做。
你能给我一些建议吗? :)

这是我使用的代码,但没有必要的结果:

public static void main(String[] args) throws Exception {
File file = new File("/Some/path/tothis.xml");
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//*[not(*)]";
DocumentBuilderFactory builderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(file);
document.getDocumentElement().normalize();
NodeList nodeList = (NodeList)
xPath.compile(expression).evaluate(document,XPathConstants.NODESET);
for(int i = 0 ; i System.out.println("| "+ new Parser2().getNodePath(nodeList.item(i)) +" | " + nodeList.item(i).getTextContent() + " |");
}
}
public String getNodePath(Node node) {
if(node == null) {
throw new IllegalArgumentException("Node cannot be null");
}
StringBuilder pathBuilder = new StringBuilder(".");
String [] lastNode = node.getnodename().split(":");
pathBuilder.append(lastNode[1]);
Node currentNode = node;
if(currentNode.getNodeType() != Node.DOCUMENT_NODE) {
while (currentNode.getParentNode() != null) {
currentNode = currentNode.getParentNode();
if(currentNode.getNodeType() == Node.DOCUMENT_NODE) {
break;
} else if(getIndexOfArrayNode(currentNode) != null) {
String [] nodename = currentNode.getnodename().split(":");
pathBuilder.insert(0,nodename[1] + getIndexOfArrayNode(currentNode).toString() +".");
} else {
String [] nodename = currentNode.getnodename().split(":");
pathBuilder.insert(0,nodename[1] +"." );
}
}
}
return pathBuilder.toString();
}
private boolean isArrayNode(Node node) {
if (node.getNextSibling() == null && node.getPreviousSibling() == null) {
// Node has no siblings
return false;
} else {
// Check if node siblings are of the same name. If so,then we are inside an array.
return (node.getNextSibling() != null && node.getNextSibling().getnodename().equalsIgnoreCase(node.getnodename()))
|| (node.getPreviousSibling() != null && node.getPreviousSibling().getnodename().equalsIgnoreCase(node.getnodename()));
}
}
private Integer getIndexOfArrayNode(Node node) {
if(isArrayNode(node)) {
int leftCount = 0;
Node currentNode = node.getNextSibling();
while(currentNode != null) {
leftCount++;
currentNode = currentNode.getPreviousSibling();
}
return leftCount;
} else {
return null;
}
}

非常感谢





推荐阅读
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 优化Nginx中PHP-FPM模块配置以提升性能
    通过调整Nginx与PHP-FPM之间的配置,可以显著提高Web服务器处理PHP请求的速度和效率。本文将详细介绍如何针对不同的应用场景优化PHP-FPM的各项关键参数。 ... [详细]
  • Activity跳转动画 无缝衔接
    Activity跳转动画 无缝衔接 ... [详细]
  • 本文详细解析了Java中流的概念,特别是OutputStream和InputStream的区别,并通过实际案例介绍了如何实现Java对象的序列化。文章不仅解释了流的基本概念,还探讨了序列化的重要性和具体实现步骤。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • SpringBoot底层注解用法及原理
    2.1、组件添加1、Configuration基本使用Full模式与Lite模式示例最佳实战配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置类组 ... [详细]
  • Hibernate入门指南:单表数据库操作详解
    本文介绍了Hibernate作为全面的ORM框架的基础知识,并详细讲解了在MyEclipse环境中配置Hibernate以及进行基本的数据库单表操作的方法,包括增删改查等常见操作。 ... [详细]
  • 设计模式系列-原型模式
    一、上篇回顾上篇创建者模式中,我们主要讲述了创建者的几类实现方案,和创建者模式的应用的场景和特点,创建者模式适合创建复杂的对象,并且这些对象的每个组成部分的详细创建步骤可以是动态的变化的,但 ... [详细]
  • 本文深入探讨了JLine库中的ConsoleReader.drawBuffer()方法的使用场景和具体实现,通过多个实际代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • 深入解析Android Activity生命周期
    本文详细探讨了Android中Activity的生命周期,通过实例代码和详细的步骤说明,帮助开发者更好地理解和掌握Activity各个阶段的行为。 ... [详细]
  • 基于OpenCV的小型图像检索系统开发指南
    本文详细介绍了如何利用OpenCV构建一个高效的小型图像检索系统,涵盖从图像特征提取、视觉词汇表构建到图像数据库创建及在线检索的全过程。 ... [详细]
  • 近期在研究Java IO流技术时,遇到了一个关于如何正确读取Doc文档而不出现乱码的问题。本文将详细介绍使用Apache POI库处理Doc和Docx文件的具体方法,包括必要的库引入和示例代码。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 最近遇到了一个关于单链表的编程问题,这是来自福富公司的笔试题目。以往我通常使用C语言来解决这类问题,但这次决定尝试用Java来实现。该题目要求实现一个单链表,并完成特定的方法。 ... [详细]
  • 之前学习过get信息的方法,就是通过接口得到数据,然后对数据进行处理json处理和xml处理最近学习了post,所以小小的总结一下先说一下使用系统的NSURLConnectio ... [详细]
author-avatar
平凡小几
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有