2012-09-04 23 views
1

我想從一個xml字符串創建一個org.w3c.dom.Document對象。我遵循了許多人在其他問題中提出的建議,但文件最終是空的。下面的代碼有什麼問題?麻煩從java中的xml字符串創建org.w3c.dom.Document

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse(new InputSource(new StringReader(response.getResponseText()))); 

和字符串中的XML文本如下所示(這是來自response.getResponseText())

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
<s:Header> 
    <a:Action s:mustUnderstand="1">http://www.blah.com/ns/2006/05/01/webservices/123/TokenManagement_1/CreateServiceToken_1_Reply</a:Action> 
    <CacheResponse xsi:type="DoNotStoreCacheResponse" xmlns="http://www.blah.com/ns/2008/03/01/webservices/123/Cache_1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <Date>2012-09-04T15:35:06.8116593Z</Date> 
     <DoNotStore /> 
    </CacheResponse> 
    <a:RelatesTo>ba04425d-d93e-4a70-a134-ab8e29d5345c}</a:RelatesTo> 
</s:Header> 
<s:Body> 
    <CreateServiceToken_Response_1 xmlns="http://www.blah.com/ns/2006/05/01/webservices/123/TokenManagement_1" xmlns:global="http://www.blah.com/ns/2006/05/01/webservices/123/Common_1"> 
     <Expiration>2012-09-04T17:04:19.1834228Z</Expiration> 
     <global:Token>3DEC2723A01047D1590544CBA5BA1E30326535E609DC1E6FAC5C659BC3B8A693BB054834A58B235037ED830CD05784DB176A62309AEB4B608C6F0B5B3F13ADE0EC56BE9F822ACFA3B549D4427D89BF030BFF48BA671DCAEB49940EFEBDEBFB71</global:Token> 
    </CreateServiceToken_Response_1> 
</s:Body> 

任何人都可以看到什麼是錯我的代碼?我最終只想在文檔上運行幾個xpath查詢...

+0

你爲什麼說這個文件是「空的」。另外,什麼是「響應」? – jtahlborn

回答

2

我建議先設置docFactory.setNamespaceAware(true);,否則解析,構建的DOM和XPath實現將無法使用XML你已經發布的命名空間。

+0

我通過將響應流直接轉換爲來自流的文檔而不是將其轉換爲字符串然後轉換爲文檔,從而使文檔能夠工作。不過,由於關於setNameSpaceAware的寶貴建議,我將其提升並標記爲答案 – theMothaShip