2015-09-12 146 views
0

我得到了一個我想更新的xml文檔,並使用遞歸函數遍歷節點。不過,我在更新節點屬性時遇到問題。 我想隱藏用戶的所有路徑並用一個鍵替換它們。這是我有這麼遠更新Scala XML中的節點屬性

XML文檔例如:

<html> 
    <head> 
     <title>my document</title> 
     <link rel="stylesheet" href="/styles/style.css"/> 
    </head> 
    <body> 
     <a href="link1"></a> 
     <img src="link2"/> 
     <img src="link3"/> 
     <img src="link1"/> 
     <a href="link5"></a> 
    </body> 
    </html> 

這是通過我的遞歸函數傳遞,然後調用updateNode功能來更新它

def processNode(n: Node){ 
    if(n.label == "a") { 
      updateNode(n, "href") 
     } 
    } 
    n.child foreach processNode 
    } 

def updateNode(n: Node, att: String) { 
val k: Int = getKey(n.attribute(att).get.toString) 
if (k == c){ // if k == c then key does not exists 
    list += (c -> n.attribute(att).get.toString()) 
    // update node 
    c = c + 1 
} else { 
    // update node 
}} 

我測試過.attributes.remove和.attributes.append,但他們似乎沒有工作。 我假設我可能需要使用.copy但節點數據類型沒有.copy .. Elem確實

+0

最好給一些示例xml文檔,讓其他人知道結構。 –

回答

0

正如我認識到你正在使用SAX解析器來解析你的XML文檔到內存!這是一個解析器/閱讀器。如果你想修改已加載的XML樹對象圖(即以更復雜的方式從節點到節點添加屬性),以便將其寫回磁盤或在修改後將其通過電纜發送出去那麼樹結構就可以使用JAXB庫。

如果你不想花時間,你只需要改變一個屬性來修復你的樹,那麼你可以留在SAX解析器中,但然後你需要臨時保存並將文件(DataStream)寫回來自字符串緩衝區的字符串/文本。

+0

這是從節點到節點的計劃,我已經有一個遞歸函數,並且此函數的att參數接受src或href取決於元素。我無法弄清楚的是如何更新節點。我最近開始使用scala,所以我仍然處於學習階段。然後我會看看JAXB庫 – Joseph118