如何在Java中将一个字符串转换为DOMSource?

8

我需要一些帮助。在我的 String 类型的 filedata 变量中,我保存了一个 XML 文档。现在我想将这个变量转换为 DOMSource 类型,并使用下面的代码:

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse( new InputSource( new StringReader( filedata ) ) ); 
DOMSource source = new DOMSource(doc);

并通过javax.xml.transform.Transformer进行转换:

 Transformer transformer = XMLTransformerFactory.getTransformer(messageType);
 StreamResult res = new StreamResult(flatXML);
 transformer.transform(source, res);

但是在转换后,我的flatXML为空。我检查了我的doc变量,它包含了我的XML文档并正确解析了所有内容。如果我将源更改为真实路径,一切都正常并且工作良好:

 Source source = new StreamSource("c:\\temp\\log\\SMKFFcompleteProductionPlan.xml");

我认为我的问题出现在这行代码中:

我认为我的问题出现在这行代码中:

DOMSource source = new DOMSource(doc);

但我不知道如何解决这个问题。

2个回答

16

为什么要构造DOMSource?如果你只是想要一个作为转换输入的源,那么提供StreamSource会更有效率,可以这样做:

new StreamSource(new StringReader(fileData))

最好同时提供systemId。构建DOM是浪费时间的。

哦,非常感谢)现在它可以工作了)) 但是,请问您能解释一下为什么它不能使用DOMSource吗? - turlife
不好意思,我无法立即看出问题所在。但是,您没有说明您正在使用哪些DOM和XSLT实现;这可能是某些特定于实现的问题。 - Michael Kay

1

抱歉,但我传递了文档类型变量到DOMSource:DOMSource source = new DOMSource(doc); 而不仅仅是一个字符串。 - turlife
我必须将我的Document变量转换为Node类型吗? - turlife
你能帮我吗?我该如何将我的Document转换为Node? - turlife
据我所知:NodeList nodeLst = doc.getElementsByTagName("description"); 之后,如果你进行迭代,你将会得到节点,例如第一个节点:Node fstNode = nodeLst.item(0); 但是不确定这是否对你有帮助。 :( - Shreyos Adikari
这个决定怎么样:Node document = builder.parse(new ByteArrayInputStream(filedata.getBytes()));?但结果是一样的。 - turlife
但这并没有解决我的问题。我的flatXML变量仍然为空,因为我的源变量为空。 - turlife

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接