任务:读取一个没有root element的xml文件里的内容。
(本来是要读取jboss 里定义好了的queue,但实在不知道有什么方法可以采用,只好直接读取自定义的xml文件了)
翻阅了很多资料,java里对xml文件的读取大抵采用SAX,dom或者jdom方式。但无论用那种方法,在读取xml文件,生成一个Document 对象时均报错。
在相关xml文献里发现,xml的规范语法是需要包含一个root element的,而我需要读取的文档则没有写入root element。怎么办?
寻思了半天,想了个巨笨的方法,暂时先把文件转成inputstream读入内存,然后在字符串里人为加上一个根节点。最后利用普通解析xml文件的方法解析这段数据流。程序代码如下:
public string[] readXMLFile() throws javax.xml.parsers.ParserConfigurationException,
org.xml.sax.SAXException, java.io.IOException {
//将文件转换为字符串,然后添上root element
String fileName = "test.xml";
FileReader fileIn = new FileReader(fileName);
BufferedReader buf=new BufferedReader(fileIn);
StringBuffer rets = new StringBuffer();
String s = "";
while(( s = buf.readLine()) != null){
rets.append(s+"\n");
s="";
}
buf.close();
fileIn.close();
String tmpXMLString = "<tmproot>" + rets.toString() + "</tmproot>";
//构建 document object ,并读取节点内容,并讲queue名称存入queueList中
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(tmpXMLString)));
NodeList idents =doc.getElementsByTagName("queue");
Node tmpNode = null;
int queueCount = idents.getLength();
String[] queueList = new String[queueCount];
for ( int i = 0 ; i < queueCount; i ++ ) {
queueList[i] = idents.item(i).getTextContent();// SE v1.5
//queueList[i] = tmpNode.getChildNodes().item(0).getNodeValue(); //SE v1.4
}
return queueList;
}
暂时记录一下 ,等找到更合适的方法再替换。
分享到:
相关推荐
### 使用Java语言解析XML文件的关键知识点 #### 一、引言 XML(可扩展标记语言)是一种用于存储和传输数据的标准格式。它以其强大的结构化数据表示能力而被广泛应用于不同场景,例如配置文件、数据交换等。Java作为...
在Java中,有多种解析XML文件的方式,包括DOM (Document Object Model)、SAX (Simple API for XML) 和 DOM4J。这些方法各有优势和局限性,选择哪一种取决于具体的应用场景和需求。 #### 二、DOM 解析方式 DOM 解析...
总之,XML文件自动转成Java对象工具是Java开发中不可或缺的一部分,它极大地简化了XML数据处理,提高了开发效率。通过理解和利用这类工具,开发者可以更专注于业务逻辑,而非基础的数据转换工作。
- **SAX解析:** SAX(Simple API for XML)是一种基于事件驱动的解析方式,它不将整个XML文件加载到内存,而是逐行读取,适合处理大型XML文件。 - **StAX解析:** StAX(Streaming API for XML)是另一种流式API...
然后,你可以使用 `parse` 方法解析 XML 文件,并对解析后的 `Document` 对象进行操作。 除了 DTD,XML 还可以使用 XSD(XML Schema Definition)进行更复杂的结构验证。XSD 提供了更强大的类型系统,包括数据类型...
4. 将Java对象转换为XML:调用`Marshaller.marshal()`方法,将Java对象写入XML文件。 同样,Java也可以反向操作,从XML生成Java对象或XSD。使用Unmarshaller可以将XML数据解析为Java对象,而使用工具如JAXB或XML ...
首先,Java解析APK主要依赖于对ZIP文件格式的理解,因为APK本质上就是一个ZIP文件,其结构遵循特定的Android规范。你可以使用Java内置的`java.util.zip`包来读取和解压APK,然后提取所需的元数据。以下是一些关键...
1. **JDOM**:JDOM是Java针对DOM规范实现的一个轻量级库,它提供了更直观、更高效的API来处理XML文档。JDOM允许开发者直接使用Java对象模型来创建、修改和读取XML。例如,使用JDOM创建XML文档的代码可能如下: ```...
#### 四、Java解析XML 在Java中,解析XML文件主要通过DOM(Document Object Model)和SAX(Simple API for XML)两种方式。这里我们使用DOM方式进行解析。 #### 五、Java DOM解析示例 Java代码`DomTest.java`示例...
总结来说,"xml文件转xsd文件"是为了建立XML文档的结构规范,方便数据验证并利用Java等编程语言进行数据处理。这个过程中涉及到XML解析、XSD设计、数据验证和Java对象的生成,是XML数据处理的一个重要环节。了解和...
标题 "java 读取Ftp指定位置的文件解析并入库" 涉及到的是使用Java编程语言通过FTP(File Transfer Protocol)协议从远程服务器上下载文件,然后对下载的文件进行解析,并将解析得到的数据存储到数据库中。...
Java解析FSN文件涉及到的是Java编程语言在处理特定文件格式时的应用。FSN(File System Navigation)文件可能是一种用于记录文件系统导航信息的文件格式,它可能包含了目录结构、文件属性或者其他的系统元数据。在...
在使用XOM解析XML文件时,首先需要创建一个`Builder`对象,然后调用`build()`方法读取XML文件。例如: ```java File file = new File("example.xml"); Builder builder = new Builder(); try { Document doc = ...
- **基于事件的编程(SAX)**:介绍SAX模型用于解析大型XML文件的高效方式。 - **基于规则的编程(XSLT)**:探讨XSLT在Java中实现XML文档转换的具体实践。 #### 三、时间安排 课程采用7天的时间表进行安排: - 第...
Java作为一门广泛使用的编程语言,提供了多种方法来解析和处理XML文件。本文将详细介绍Java解析XML的几种常用技术。 ### DOM(Document Object Model) DOM是W3C组织推荐的处理XML的一种接口规范。它将XML文档视为...
这些工具能够解析XML文件,并根据XML的结构自动生成对应的Java Bean类。 标题中的"xml 转Java bean工具"指的就是这样一种工具,它能够帮助开发者快速地将XML数据映射到Java对象上。这类工具通常会分析XML文件的结构...
2. 使用`SAXBuilder`的`build()`方法读取XML文件并构建`Document`对象。 3. `Document`对象代表了整个XML文档,你可以通过其根元素`getRootElement()`访问XML的顶层元素。 4. 通过遍历元素、属性和文本节点,可以...
为了生成XML文件,我们使用DOM4J库,它是一个强大的Java XML API,可以方便地创建、解析和操作XML文档。首先,需要添加DOM4J的依赖,如`dom4j-1.6.1.jar`。然后,创建Document对象,定义Element结构,并填充从数据库...
总结,Java解析WSDL文档获取具体的方法与参数涉及的主要知识点包括:XML解析(DOM)、JAX-WS框架、`javax.xml.ws.Service`类的使用,以及如何基于WSDL生成服务客户端代码。理解这些概念,将有助于开发和消费Web服务...
例如,使用Java的`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`类可以创建DOM解析器,然后调用`parse()`方法解析XML文件。一旦解析完成,`Document`对象可以通过`getElementsByTagName()`、`...