XML节点消失

时间:2014-05-22 12:25:32

标签: c# xml

我需要获得2个节点。

<OrderItem>
  +<Product PNR="FFQK2P" Type="Hotel">
  +<Product PNR="SACN8L" Type="Flight">
<OrderItem>

每个Product节点都有两个相同的节点。他们是&#34; PriceInfo&#34;和&#34; SearchParameters&#34;。我是从他们那里得到的;

XmlNode xmlHotelPriceInfo = orderItem.ParentNode.SelectSingleNode("OrderItem/Product/PriceInfo");
XmlNode xmlHotelSearchParametes = orderItem.ParentNode.SelectSingleNode("OrderItem/Product/SearchParameters");

所以我附加了节点;

xmlHotel.AppendChild(xmlHotelPriceInfo);
xmlHotel.AppendChild(xmlProductItemInfo);
xmlHotel.AppendChild(xmlHotelSearchParametes);
orderItem.AppendChild(xmlHotel);

该代码完美地创建节点。在第一个产品中;

<Product PNR="FFQK2P" Type="Hotel">
    <PriceInfo>
    <ProductItemInfo
    <SearchParameters>
</Product>

代码在for循环中。在第二个周期;

xmlFlight.AppendChild(xmlFlightPriceInfo);
xmlFlight.AppendChild(xmlProductItemInfo);
xmlFlight.AppendChild(xmlFlightSearchParametes);
orderItem.AppendChild(xmlFlight);

它附加第二个产品。但它从第一个nood中删除了PriceInfo和SearchParameters。它看起来;

<Product PNR="FFQK2P" Type="Hotel">
    +<ProductItemInfo>
</Product>
<Product PNR="SACN8L" Type="Flight">
    +<PriceInfo>
    +<ProductItemInfo>
    +<SearchParameters>
</Product>

但我需要得到像;

<Product PNR="FFQK2P" Type="Hotel">
    +<PriceInfo>
    +<ProductItemInfo>
    +<SearchParameters>
</Product>
<Product PNR="SACN8L" Type="Flight">
    +<PriceInfo>
    +<ProductItemInfo>
    +<SearchParameters>
</Product>

为什么会这样?

2 个答案:

答案 0 :(得分:2)

通过AppendChild方法,您只需更改子节点的所有者(父)节点。 看看CloneNode method

所以你的代码应该类似于:

xmlHotel.AppendChild(xmlHotelPriceInfo);
xmlHotel.AppendChild(xmlProductItemInfo);
xmlHotel.AppendChild(xmlHotelSearchParametes);
orderItem.AppendChild(xmlHotel);

...

xmlFlight.AppendChild(xmlFlightPriceInfo.CloneNode(true));
xmlFlight.AppendChild(xmlProductItemInfo.CloneNode(true));
xmlFlight.AppendChild(xmlFlightSearchParametes.CloneNode(true));
orderItem.AppendChild(xmlFlight);

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.appendchild.aspx

首先,您需要CreateElement然后AppendChild