2012-09-25 79 views
1

我有一個簡單XMLFILE替換元件和被放置在樹視圖中的XDocument放置在樹視圖與另一個的XElement

<bookstore xmlns="generic"> 
    <book genre="Book" >` 
     <title>Book of Benjamin Franklin</title> 
     <author> 
     <first-name>Benson</first-name> 
     <last-name>Frank</last-name> 
     </author> 
     <price>89.88</price> 
    </book> 
    <book genre="autobiography"> 
     <title>The Autobiography of Benjamin Franklin</title> 
     <author> 
      <first-name>Ben</first-name> 
      <middlename /> 
      <last-name>Franklin</last-name> 
     </author> 
     <price>89.88</price> 
    </book> 
    <book genre="novel" > 
    <title>The Confidence Man</title> 
    <author> 
     <first-name>John</first-name> 
     <last-name>Melville</last-name> 
    </author> 
    <price>11.99</price> 
    </book> 
</bookstore> 

我要替換(第二元件)

<book genre="autobiography" > 
    <title>The Autobiography of Benjamin Franklin</title> 
    <author> 
     <first-name>Ben</first-name> 
     <middlename /> 
     <last-name>Franklin</last-name> 
    </author> 
    <price>89.88</price> 
</book> 

與另一個元素(編輯過,我編輯過的部分爲一個字符串)

<book genre="autobiography"> 
    <title>The Autobiography of Benjamin Franklin</title> 
    <author> 
    <first-name>Ben</first-name> 
    <last-name>Franklin</last-name> 
    </author> 
    <price>89.88</price> 
</book> 

我使用的代碼是

  XElement XmlTree = XElement.Parse(text);//text contain edited portion 
      XmlElement XMLE = (XmlElement)TreeV.SelectedItem; 


      XmlDocument xdoc = new XmlDocument(); 
      xdoc.Load(scd_file); 

      XmlDocumentFragment xfrag = xdoc.CreateDocumentFragment(); 
      xfrag.InnerXml = text; 
      XmlDocumentFragment xfrag1 = xdoc.CreateDocumentFragment(); 
      xfrag1.InnerXml = XMLE.OuterXml; 

      xdoc.ReplaceChild(xfrag, xfrag1); 

但它顯示錯誤(xfrag1不是的XDOC節點) 請幫我解決這個問題。

+2

爲什麼要混合使用LINQ to XML和「舊」DOM模型?你真的要嗎?它很容易就不會...... –

回答

0

謝謝你,我所有的解決方案。

XmlElement XMLE = (XmlElement)TreeV.SelectedItem;// selection from treeview(TreeV) that we want to edit (2nd element) 
    XmlDocument XD = new XmlDocument(); 
    XD.LoadXml(text);// text is edited part save as a string 
    XmlNode root=XD.DocumentElement; 
    XmlDocument xml = XMLE.ParentNode.OwnerDocument; 
    XmlNode import= xml.ImportNode(root, true); 
    XMLE.ParentNode.ReplaceChild(import, XMLE); 
    xml.Save(scd_file); //scd_file path 
相關問題