Tag: xml

如何使用JAXB实例化一个空元素

我使用JAXB来创建XML消息。 我需要创建的XML(为简单起见): 我的代码如下所示: import javax.xml.bind.annotation.*; @XmlRootElement(name = “request”) public class Request { private String header; @XmlElement(required=true) public String getHeader() { return header; } public void setHeader(String header) { this.header=header; } } 问题:不显示header元素(header为null )。 当标头设置为空字符串时,将显示以下内容: 当我使用Object而不是String类型时,结果更糟: BTW:我正在使用此代码来创建XML字符串。 是否可以获得空标签?

JAVA:使用XPath表达式构建XML文档

我知道这不是XPath的真正含义,但如果我有一个XPath表达式的HashMap来评估如何构建XML文档。 我找到了dom-4j的DocumentHelper.makeElement(branch,xpath),除了它无法创建属性或索引。 当然存在可以做到这一点的图书馆? Map xMap = new HashMap(); xMap.put(“root/entity/@att”, “fooattrib”); xMap.put(“root/array[0]/ele/@att”, “barattrib”); xMap.put(“root/array[0]/ele”, “barelement”); xMap.put(“root/array[1]/ele”, “zoobelement”); 会导致: barelement zoobelement

将Java Date转换为XML Date Format(反之亦然)

有没有一种简单的方法将Java Date转换为XML日期字符串格式,反之亦然? 干杯, Andez

Java中的XML节点到字符串

我遇到了这个Java函数来将XML节点转换为Java String表示: private String nodeToString(Node node) { StringWriter sw = new StringWriter(); try { Transformer t = TransformerFactory.newInstance().newTransformer(); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, “yes”); t.setOutputProperty(OutputKeys.INDENT, “yes”); t.transform(new DOMSource(node), new StreamResult(sw)); } catch (TransformerException te) { System.out.println(“nodeToString Transformer Exception”); } return sw.toString(); } 它看起来很简单,因为它希望输出字符串没有任何XML声明,并且它必须包含缩进。 但我想知道实际输出应该如何,假设我有一个XML节点: Bee buzz Most other kinds of bees live alone instead of in a colony. These […]

如何在Java中针对XSD 1.1validationXML?

在Java中针对XML Schema 1.1validationXML文件的最佳方法是什么? 我从本教程中获取了代码并更改了工厂查找的行以使用XML Schema 1.1,正如我在Xerces FAQ中的代码示例中看到的那样。 这是我的代码: import java.io.File; import java.io.IOException; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import org.xml.sax.SAXException; public class XSDValidator { private static void validateFile(File xmlFile, File xsdFile) throws SAXException, IOException { // 1. Lookup a factory for the W3C XML Schema language SchemaFactory factory = SchemaFactory.newInstance(“http://www.w3.org/XML/XMLSchema/v1.1”); // […]

在Java DOM文档中设置名称空间和前缀

我正在尝试将ResultSet转换为XML文件。 我首先使用这个例子进行序列化。 import org.w3c.dom.bootstrap.DOMImplementationRegistry; import org.w3c.dom.Document; import org.w3c.dom.ls.DOMImplementationLS; import org.w3c.dom.ls.LSSerializer; … DOMImplementationRegistry registry = DOMImplementationRegistry.newInstance(); DOMImplementationLS impl = (DOMImplementationLS)registry.getDOMImplementation(“LS”); … LSSerializer writer = impl.createLSSerializer(); String str = writer.writeToString(document); 在我完成这项工作后,我尝试validation我的XML文件,有几个警告。 一个关于没有doctype的人。 所以我尝试了另一种方法来实现它。 我遇到了Transformer课程。 这个类让我设置编码,doctype等。 以前的实现支持自动命名空间修复。 以下不是。 private static Document toDocument(ResultSet rs) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = […]

transformer.setOutputProperty(OutputKeys.ENCODING,“UTF-8”)不起作用

我有以下方法将XMLDom写入流: public void writeToOutputStream(Document fDoc, OutputStream out) throws Exception { fDoc.setXmlStandalone(true); DOMSource docSource = new DOMSource(fDoc); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, “xml”); transformer.setOutputProperty(OutputKeys.ENCODING, “UTF-8”); transformer.setOutputProperty(OutputKeys.INDENT, “no”); transformer.transform(docSource, new StreamResult(out)); } 我正在测试其他一些XMLfunction,这只是我用来写入文件的方法。 我的测试程序生成了33个测试用例,其中写出了文件。 其中28个具有以下标题: … 但出于某种原因,现在有一个测试用例产生: … 还有四种产品: … 您可以清楚地看到,我将ENCODING输出键设置为UTF-8。 这些测试曾用于早期版本的Java。 我没有在一段时间内(超过一年)运行测试,但今天在“Java(TM)SE运行时环境(版本1.6.0_22-b04)”上运行我得到了这个有趣的行为。 我已经validation导致问题的文档是从最初具有这些编码的文件中读取的。 似乎新版本的库试图保留已读取的源文件的编码。 但这不是我想要的……我真的希望输出是UTF-8。 有没有人知道可能导致变压器忽略UTF-8编码设置的任何其他因素? 还有什么必须在文档上设置,以忘记最初读取的文件的编码? 更新: 我在另一台机器上检查了同一个项目,在那里构建并运行了测试。 在那台机器上,所有测试都通过了! 所有文件的标题中都有“UTF-8”。 该机器具有“Java(TM)SE运行时环境(版本1.6.0_29-b11)”两台机器都运行Windows 7.在新机器上运行正常,jdk1.5.0_11用于进行构建,但是在旧机器上运行机器jdk1.6.0_26用于构建。 用于两个版本的库完全相同。 在构建时是否可以与1.5的JDK 1.6不兼容? […]

获取JAXBexception,如“两个类具有相同的XML类型名称……”

获取JAXBexception,例如“两个类具有相同的XML类型名称……”, 以下是exception详细信息 : 线程“main”中的exceptioncom.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:IllegalAnnotationExceptions的1个计数两个类具有相同的XML类型名称“city”。 使用@ XmlType.name和@ XmlType.namespace为它们分配不同的名称。 此问题与以下位置有关:com.model.City的com.model.City com.model.City com.model.Address.getCurrentCity()at com.model.Address此问题与以下位置有关:at com.common公共com.common.City com.model.Address.getPreviousCity()at com.model.Address at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException $ Builder.check(Unknown Source)at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(Unknown Source)at com.sun位于com.sun.xml.internal的com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl $ JAXBContextBuilder.build(未知来源)的.xml.internal.bind.v2.runtime.JAXBContextImpl。(未知来源)。位于sun.reflect.NativeMethodAccessorImpl的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的com.sun.xml.internal.bind.v2.ContextFactory.createContext(未知来源)中的bind.v2.ContextFactory.createContext(未知来源)。在位于javax.xml的javax.xml.bind.ContextFinder.newInstance(未知来源)的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)中调用(未知来源)。来自com.PojoToXSD.m的javax.xml.bind.JAXBContext.newInstance(未知来源)的javax.xml.bind.JAXBContext.newInstance(未知来源)中的bind.ContextFinder.find(未知来源) 艾因(PojoToXSD.java:17) 我举了这样的例子: package **com.model**; —->this package contains ‘Address’ class and ‘City’ class public class Address { private String areaName; private City currentCity; private com.common.City previousCity; } package com.model; public class City […]

在Eclipse中从XML生成Java代码

我正在开发一个项目,它将有几个彼此非常相似的Java类,并且我想从XML文件生成。 我希望能够做的是更改Eclipse构建过程以执行以下操作: 编译代码生成器 运行代码生成器,将XML转换为Java 编译项目的其余部分 我可以手动完成所有操作,但我更愿意让Eclipse为我做这一切。 例 我希望能够获取如下所示的源XML文件: 并让它给我类似于以下内容(在适当的单独文件中): public class Date extends Command { public ResponseCode execute() { Server srv = getServer(); srv.send(“DATE”); return srv.getResponse(); } } public class Group extends Command { public ResponseCode execute() { Server srv = getServer(); if (srv.hasCapability(Capabilities.READER) == false) { Log.debug(“Attempting non-available capability: READER”); } String groupname = […]

Java 6中对xinclude的默认支持?

我在我的应用程序中看到,在我的解析XML文件中包含xinclude在我的Java XSLT转换中不起作用。 但是,虽然我这样做: DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setXIncludeAware(true); 我没有专门设置变换器工厂,因为System.getProperty(“javax.xml.transform.TransformerFactory”)返回“null”。 我的问题:默认的Java(1.6或6)是否支持xinclude,还是我必须添加替代的XSLT解析器,例如Apache Xerces?