2016-12-16 48 views
0

我收到一个文件finalDocument,并且想要设置相同的DocType作为输入文件xmlDocument。这就是我要做的事:为什么转换后DocType为null?

finalDocument = icBuilder.parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes("UTF-8")))); 

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 

DocumentType doctype = xmlDocument.getDoctype(); 

StringWriter writer = new StringWriter(); 

transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId()); 
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId());  

transformer.transform(new DOMSource(finalDocument), new StreamResult(writer)); 

然而,由于某些原因的finalDocumentDocType未设置。我没有得到任何例外 - 这只是null

任何想法我做错了什么?

Btw:doctype.getSystemId()doctype.getPublicId()不为空且有效。

+0

那么,它有一个DocType开始?它从未在您显示的代码片段中更新。 –

+0

@四十二你的意思是'finalDocument'?它有一个有关系吗? – displayname

+0

w3c标签是如何相关的?这似乎不是关于标准本身的问题,而是一个编程问题。 – tambre

回答

1

finalDocument变量被传递作为源到transform方法:

void javax.xml.transform.Transformer.transform(Source xmlSource, Result outputTarget) throws TransformerException 

的转换的结果被放置在第二个参数。所以我期望你用setOutputProperty设置的docType将被放置在目标上,这是你的作者对象。

+0

正确 - 这就是为什么你不应该复制和粘贴其他代码。 ^^ – displayname