有关String转化为Xml的Document出现的问题?(300分相赠)
有关String转化为Xml的Document出现的问题?
注意:请看完问题再回复,不要一看题目就去找来不适合的源码贴上来。
问题:“从xml文件生成的Document”和“从String转化的Document”在xpath应用上不同!
我用java编写Ejb,因为要把最终的函数发布为Web服务,所以接口采用了String作为输入参数,在内部处理时,首先把String转化为org.w3c.dom.Document对象。转换所用的代码见附录A。
问题是这种方式生成的Document在Xpath调用时不能正常工作。对于比较简单的xpath(比如/*, /*[1]/*[3])之类的还可以,可是对于比较复杂一点点的就不行了。比如( "//WfMessageBody/*[contains(name(), 'Request')]",“/WfMessage/WfMessageBody/*[1]”)。
而同样的调用,在从xml文件生成的Document对象上可以正常工作。(当然,除了Document生成过程之外,其他一切代码都一样)
请教各位大师该如何处理?或者给出一个String转化Document更好的实现方法。欢迎探讨建议。解决后,奉上300分。
注意:(1) 因为要在EJB中用,那种从xml文件load的方案是不可以的。
附录A:
/**
* 把一个Xml字符串转换成一个Xml文档文件。
* @param strXml Xml文档字符串
* @return Document,如果出错返回空。
*/
public org.w3c.dom.Document xmlString2Doc(String strXml) {
Document ret = null;
try {
// Create a builder factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false);
// Create the builder and parse the file
ret = factory.newDocumentBuilder().parse(new InputSource(new
StringReader(strXml)));
}
catch (Exception e) {
e.printStackTrace();
}
return ret;
}