2011-08-31 78 views
1

我有一個xml文檔,我在其中使用了用戶節點列表。使用StaX附加XML元素

有沒有辦法使用StAX API執行以下操作?

  1. 更新密碼屬性[變更密碼選項]
  2. 添加一個新用戶節點
+0

沒有,stax文檔上沒有附加內容,您必須重新構建整個文檔。 –

+0

我有和Nageswara一樣的問題。至少可以寫入我讀取的同一個文件嗎?或者我必須以某種方式緩衝?一個例子會非常有幫助。 – lony

回答

1

的StAX聽起來並不像做你的要求,我認爲什麼最簡單的選擇。但是...

XMLStreamReader接口有一個getLocation()方法,所以當您遇到您感興趣的XML字符串的一部分時,您可以維護一個要執行的操作列表,以及您應該執行的位置他們。

所以在粗糙的僞代碼:

while (parsing) { 
    int event = xmlStreamReader.next(); 
    if (isEventPasswordAttribute(event)) { 
     // create an Action to update password attribute, 
     // passing in xmlStreamReader.getLocation() and other necessary parameters 
    } else if (isTimeToAddNewUserNode(event)) { 
     // create an Action to add new user 
     // passing in xmlStreamReader.getLocation() and other necessary parameters 
    } 
} // end parse 

... 

for (Iterator<Action> it = actions.iterator(); it.hasNext();) { 
    Action action = it.next(); 
    action.perform(); 
} 

需要以更新它要傳遞給原始的XML字符串/流標準路線的行動。對於字符串,這應該很容易。對於可能不是的流,一旦流首次被讀取,它可能不能成爲reset()。在執行原始分析時,您可能必須自行緩衝所有內容。而且您必須小心操作不會改變位置,否則隨後的操作將查看XML流中的錯誤位置。