Home > Enterprise >  Empty Child and another child attribute vlaues
Empty Child and another child attribute vlaues

Time:12-10

Hi All: Could you please tell me what is the mistake in gettting the child & child2 attribute values?

I'm getting the valu of the node attribute but not for the childs nodes.

Overall i need to get Name value from products, Visibile value from the element Visibilities, and Price value from elment Prices.

Code:

XmlDocument doc = new XmlDocument();
        doc.Load("Prices.txt");
        XmlNodeList nodes = doc.GetElementsByTagName("RetroPrintProduct");
        foreach (XmlNode node in nodes)
        {
            Console.WriteLine("Name={0} ", node.Attributes["Name"].Value);
            foreach (XmlNode child in node.SelectNodes("ProductVisibility "))
            {
                Console.WriteLine("Visible={0}", child.Attributes["Visible"].Value);
                foreach (XmlNode child2 in child.SelectNodes("Prices"))
                {
                    Console.WriteLine("Price={0}", child2.Attributes["Price"].Value);
                }
            }

        }

XML file:

<Item>
    <RetroPrintProduct Nino123="d89e280b-c8d5-4da2-87da-36e4a57e2867" Nino1="2022ProfileProducts.RetroPrintProduct" Sys_Index="UpdateOnly" DefaultIconName="RetroPrints_10x8x2_R_Metallic.png" DefaultOutputProfileName="Nino" DefaultOutputProfileTypeFullName="2022Profile" Name="Item Retro">
      <ShippingMethodPrices Index="Replace" />
      <Visibilities Index="Replace" />
    </RetroPrintProduct>
  
    <RetroPrintProduct Nino123="67d1577d-7baf-4b3f-a9fb-9d52404e45f4" Nino1="2022ProfileProducts.RetroPrintProduct" Sys_Index="UpdateOnly" DefaultIconName="RetroPrints_10x8x2_S_Normal.png" DefaultOutputProfileName="Nino" DefaultOutputProfileTypeFullName="2022Profile" Name="Item 2 Retro">
      <ShippingMethodPrices Index="Replace" />
      <Visibilities Index="Replace">
        <ProductVisibility Nino123="cc0096e0-d964-4e45-93f7-9258ddee148d" Sys_GlobalUniqueId="cc0096e0-d964-4e45-93f7-9258ddee148d" Sys_ReplicationId="39f43856-a16f-4555-b519-ccf71b97ee58" Nino1="2022.ProductVisibility" Activated="True" Noprices="False" PhotoSource="EndUserPhotos" BackgroundColor="Default" Icon="" Image="" IsUnusableByLicense="False" MaxDate="2999-12-31" MinDate="1900-01-01" Name="" Object="Visible" Visible="True" ProductLibrary="" ReplicationId="39f43856-a16f-4555-b519-ccf71b97ee58" SysCode="">
          <Prices Index="Replace">
            <ProductPrice Nino123="4ca2658e-3e07-4636-b33f-d87fb021288a" Sys_GlobalUniqueId="4ca2658e-3e07-4636-b33f-d87fb021288a" Sys_ReplicationId="3e75b8f4-d1b6-41fe-be9e-d2858caf6eb9" Nino1="2022.ProductPrice" FixFee="0" ServiceFee="0" Mode="Replace" FromQuantity="1" Price="0.5" ProductPriceType="PerPageQuantity" ProductLibrary="" ReplicationId="3e75b8f4-d1b6-41fe-be9e-d2858caf6eb9" SysCode="" />
          </Prices>
        </ProductVisibility>
      </Visibilities>
    </RetroPrintProduct>
    </Item>

CodePudding user response:

It looks like you're missing some nesting when searching through the nodes. ProductVisibility is under Visibilites, not RetroPrintProduct, and Price is an attribute of ProductPrice, not Prices.

Something like this should do the trick (note that I named the nodes in code to match the xml names to make it easier to remember which child is which):

XmlDocument doc = new XmlDocument();
doc.Load(@"c:\temp\Prices.xml");
XmlNodeList retroPrintProducts = doc.GetElementsByTagName("RetroPrintProduct");

foreach (XmlNode retroPrintProduct in retroPrintProducts)
{
    Console.WriteLine("Name={0} ", retroPrintProduct.Attributes["Name"].Value);

    foreach (XmlNode visibility in retroPrintProduct.SelectNodes("Visibilities"))
    {
        foreach (XmlNode productVisibilty in visibility.SelectNodes("ProductVisibility"))
        {
            Console.WriteLine("Visible={0}", productVisibilty.Attributes["Visible"].Value);

            foreach (XmlNode price in productVisibilty.SelectNodes("Prices"))
            {
                foreach (XmlNode productPrice in price.SelectNodes("ProductPrice"))
                {
                    Console.WriteLine("Price={0}", productPrice.Attributes["Price"].Value);
                }
            }
        }
    }
}
  • Related