none
无法通过XmlDocument.GetElementsByTagName()进行赋值(C#) RRS feed

  • 问题

  • 代码:

    string dd = @"<?xml version='1.0' encoding='utf-8'?>
                                  <group>
                                      <item>
                                        <id>1</id>
                                        <name>zhangsan</name>
                                     </item>
                                     <item>
                                        <id>2</id>
                                        <name>lisi</name>
                                     </item>
                                  </group>";

                XmlDocument xd = new Windows.Data.Xml.Dom.XmlDocument();
                xd.LoadXml(dd);
                var list2 = xd.GetElementsByTagName("item");

                XmlNodeList list = xd.ChildNodes;
                var dx = xd.HasChildNodes();

       list2,list全部没有值,但提示:The value of the local or argument 'list2(list)' is unobtainable at this time.

    dx有值。

    不知道什么原因。而且情况更奇怪的是我运行例子Windows Runtime XML data API sample时,在

    void Scenario2BtnDefault_Click(object sender, RoutedEventArgs e)
            {
                try
                {
                    String xml;
                    scenario2OriginalData.Document.GetText(Windows.UI.Text.TextGetOptions.None, out xml);

                    var doc = new Windows.Data.Xml.Dom.XmlDocument();
                    doc.LoadXml(xml);

                    var xpath = "/products/product[Sell10day>InStore]/@hot";
                    var list = doc.GetElementsByTagName("product");
                    var hotAttributes = doc.SelectNodes(xpath);
                    for (uint index = 0; index < hotAttributes.Length; index++)
                    {
                        hotAttributes.Item(index).NodeValue = "1";
                    }

                    RichEditBoxSetMsg(scenario2Result, doc.GetXml(), true);
                    scenario2BtnSave.IsEnabled = true;  // enable Save button
                }
                catch(Exception exp)
                {
                    RichEditBoxSetError(scenario2Result, exp.Message);
                }
            }

    list会有值。关于此类问题,我在多个项目中检验,除了上面的例子,其他都不成功。

    2012年3月29日 7:50

答案

  • 用 object 替代 var, 然后用的时候 在as一下类型。 这样debug下是可以看见值的。 不过你原来的写法没错,只是debugger有些问题看不见而已。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月29日 9:30
    版主
  • 美国那边没有回复,我之后又测试了很多例子,发现都会有类似的问题,我想应该会得到重视去改的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月6日 8:43
    版主

全部回复

  • 应该都有值的,你的这个情况是因为你在Debug下Quick Watch可能没有抓取到对象。 我将你的代码绑定到UI上,是有内容显示的:

                XmlDocument xd = new Windows.Data.Xml.Dom.XmlDocument();
                xd.LoadXml(dd);
                var list2 = xd.GetElementsByTagName("item");
                listcontrol1.ItemsSource = list2.ToList();
                XmlNodeList list = xd.ChildNodes;
                listcontrol2.ItemsSource = list.ToList();
                var dx = xd.HasChildNodes();
    


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月29日 9:07
    版主
  • 这样我在调试程序的时候没办法观察list2 对象的变化了,这个问题有什么办法可以解决吗??

    2012年3月29日 9:26
  • 用 object 替代 var, 然后用的时候 在as一下类型。 这样debug下是可以看见值的。 不过你原来的写法没错,只是debugger有些问题看不见而已。

    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月29日 9:30
    版主
  • 您说得那种方法能够实现,但体验不是特别好。这个问题能不能从根本上解决呢,还是以后的版本会解决??

    2012年3月29日 10:16
  • 这个先等我去确认下,是否一个已知的问题,目前情况如何,再通知你。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月30日 3:56
    版主
  • 好的,谢谢哟!
    2012年3月30日 6:44
  • 美国那边没有回复,我之后又测试了很多例子,发现都会有类似的问题,我想应该会得到重视去改的。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月6日 8:43
    版主