2013-10-24 44 views
0

我在重新安排xml數據時遇到了問題。在c中重新排列Xml子節點#

我有這樣

<PolicySummary> 
    <InsuredName></InsuredName> 
    <PolicyNumber></PolicyNumber> 
    <PrevPolicyNumber></PrevPolicyNumber> 
    <PolicyState></PolicyState> 
    <TotalPremium></TotalPremium> 

    <Address></Address> 
    <Address1></Address1> 
    <City></City> 
    <State></State> 
    <Zip></Zip> 
</PolicySummary> 

但我想這樣

<PolicySummary> 
    <InsuredName></InsuredName> 
    <PolicyNumber></PolicyNumber> 
    <PrevPolicyNumber></PrevPolicyNumber> 
    <PolicyState></PolicyState> 
    <TotalPremium></TotalPremium> 
    <MailingAddress> 
     <Address></Address> 
     <Address1></Address1> 
     <City></City> 
     <State></State> 
     <Zip></Zip> 
    </MailingAddress> 
</PolicySummary> 

我想郵寄地址的節點應該包含地址,地址1,城市,州,郵編任何一個可以幫助。我試着像追加孩子多路,後插入但沒有什麼是工作

我設法採取節點,並插入郵件地址,並追加其

XmlDocument policysummary = new XmlDocument(); 

XmlNode copynode = policysummary.ImportNode(
    xmlautoDocument.SelectSingleNode("PolicySummary/TotalPremium"), true); 

XmlNode premium = policysummary.SelectSingleNode("TotalPremium"); 
XmlNode addressss = policysummary.CreateNode(XmlNodeType.Element, 
              "Mailingaddress", null); 
XmlNode root2 = policysummary.DocumentElement; 

premium.InsertAfter(addressss, premium); 
+1

請顯示您已經嘗試過的內容,以便我們能夠幫助您瞭解發生了什麼問題,而不僅僅是說它不起作用。此外,如果您可以使用LINQ to XML而不是XmlDocument,那會使事情變得更簡單。 –

+0

I直接從SQl獲取數據並將其轉換爲XML。但我想重新排列出 – user2915729

+0

那麼你現在的代碼給出了什麼樣的輸出? (另外,請格式化您的代碼 - 目前它已遍佈全球。) –

回答

1

試試這個使用XDocument代替XmlDocument

var xDoc = XDocument.Parse(xmlString) 

var root = xDoc.Element("PolicySummary"); 
var totalPremium = root.Element("TotalPremium"); 

//get all values you want to put in mailing address 
var address = root.Element("Address"); 
//... 

var mailingAddress = new XElement("MailingAddress"); 
mailingAddress.Add(address); 

//Add mailing address after total premium 
totalPremium.AddAfterSelf(mailingAddress); 

//Remove all values you inserted in mailing address 
address.Remove(); 

//If you want to save it somewhere 
xDoc.Save(fileName);