2013-10-24 46 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);