You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XmlDocument获取RetroPrintProduct子节点属性值失败问题排查

问题描述

使用XmlDocument解析XML文件时,仅能获取RetroPrintProduct节点的Name属性值,无法获取其子节点的Visible、Price属性值。需求如下:

  • 从RetroPrintProduct节点提取Name值
  • 从Visibilities相关节点提取Visible值
  • 从Prices相关节点提取Price值

原代码:

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文件内容:

<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>
错误原因
  1. 节点层级不匹配:ProductVisibility是Visibilities的子节点,并非RetroPrintProduct的直接子节点,原代码直接从RetroPrintProduct查找ProductVisibility,自然找不到。
  2. 属性归属错误:Price属性属于ProductPrice节点,而非Prices节点,原代码试图从Prices节点获取该属性,结果为空。
  3. 选择器存在多余空格:node.SelectNodes("ProductVisibility ")末尾的空格会导致节点匹配失败。
修正后的代码
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);
    
    // 遍历RetroPrintProduct下的Visibilities节点
    foreach (XmlNode visibilityNode in node.SelectNodes("Visibilities"))
    {
        // 获取Visibilities内的ProductVisibility节点
        foreach (XmlNode productVisNode in visibilityNode.SelectNodes("ProductVisibility"))
        {
            Console.WriteLine("Visible={0}", productVisNode.Attributes["Visible"].Value);
            
            // 遍历ProductVisibility下的Prices节点
            foreach (XmlNode pricesNode in productVisNode.SelectNodes("Prices"))
            {
                // 获取Prices内的ProductPrice节点,提取Price属性
                foreach (XmlNode priceNode in pricesNode.SelectNodes("ProductPrice"))
                {
                    Console.WriteLine("Price={0}", priceNode.Attributes["Price"].Value);
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者user838691

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:50:23