【问题标题】:no output while displaying the values of arraylist显示arraylist的值时没有输出
【发布时间】:2016-01-13 15:53:23
【问题描述】:

我编写了一个 c# 代码,它显示存储在 arraylist 中的值。

static void Main()
        {

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(@"C:\\shreyas\\NX_Temp\\NX_Temp\\000048_A\\CompareReport3D.xml");


            XmlNodeList nodeList = xmlDoc.DocumentElement.SelectNodes("*");
            List<XmlNode> returnedmatchNode=TraverseXml(nodeList);
             for (int iIndex = 0; iIndex < returnedmatchNode.Count; iIndex++)
             {

                 Console.WriteLine("values" +returnedmatchNode[iIndex].Value);
             }

        }

        public static List<XmlNode> TraverseXml(XmlNodeList nodeList, int counter = 1)
        {
            List<XmlNode> matchNode = new List<XmlNode>();

            foreach (XmlNode node1 in nodeList)
            {
                if (node1.Attributes != null && node1.Attributes["match"] != null)
                {

                    matchNode.Add(node1.Attributes["match"]);

                }
                TraverseXml(node1.ChildNodes, counter);
            }
            Console.ReadLine();
            return matchNode;
        }

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<xd:xmldiff version="1.0" srcDocHash="11928043053884448382" options="IgnoreChildOrder IgnoreNamespaces IgnoreWhitespace IgnoreXmlDecl " fragments="no" xmlns:xd="http://schemas.microsoft.com/xmltools/2002/xmldiff">
    <xd:node match="2">
        <xd:node match="2">
            <xd:node match="19">
                <xd:node match="2">
                    <xd:add>Y</xd:add>
                </xd:node>
            </xd:node>
            <xd:add match="/2/2/11" opid="2" />
            <xd:change match="18" name="OWNINGSITE">
                <xd:node match="2">
                    <xd:remove match="1" />
                </xd:node>
            </xd:change>
            <xd:add match="/2/2/2-9" opid="1" />
            <xd:change match="17" name="STATUS">
                <xd:node match="2">
                    <xd:remove match="1" />
                </xd:node>
            </xd:change>
            <xd:remove match="14-16" />
            <xd:remove match="13" subtree="no">
                <xd:remove match="1-2" />
            </xd:remove>
            <xd:remove match="11" opid="2" />
            <xd:remove match="10" />
            <xd:remove match="2-9" opid="1" />
            <xd:remove match="1" />
        </xd:node>
        <xd:node match="5">
            <xd:node match="3">
                <xd:node match="11">
                    <xd:change match="1">0,1,0,1,0,0,0,0,1</xd:change>
                </xd:node>
            </xd:node>
        </xd:node>
    </xd:node>
    <xd:descriptor opid="1" type="move" />
    <xd:descriptor opid="2" type="move" />
</xd:xmldiff>

我正在尝试显示返回的matchNode 的值。但它没有显示任何价值。我无法找出我的代码中的错误。

【问题讨论】:

  • 在 Visual Studio 调试器中运行您的程序,设置断点,单步执行代码,检查变量并查看失败的地方
  • 欢迎来到 StackOverflow!请提供minimal reproducible example,以便人们可以在他们自己的 PC 上实际重现您的问题。
  • 您是否在调用TraverseXml 后验证了returnedmatchNode 包含一个或多个值?
  • 您确定它不只是在等待您按回车每个节点一次 以通过所有这些读取行吗?还是 XML 真的很小
  • 我确实检查了返回的matchNode 值。它没有给出任何价值

标签: c# .net arraylist


【解决方案1】:

将递归调用改为

matchNode.AddRange(TraverseXml(node1.ChildNodes, counter));

否则你不包括递归的结果。

为了让运行您的代码的任何人保持理智,请将ReadLine() 移动到Main 的末尾

【讨论】:

    【解决方案2】:

    您总是在实例化一个新的List&lt;XmlNode&gt; 而不向其中添加新结果:

    // this gets called in each round of your recursion
    List<XmlNode> matchNode = new List<XmlNode>();
    

    在您的方法中,您只是将直接子节点添加到该列表中。您需要将中间结果“携带”到下一次递归。

    只需替换

    TraverseXml(node1.ChildNodes, counter);
    

    matchNode.AddRange(TraverseXml(node1.ChildNodes, counter));
    

    【讨论】:

    • 是的,我就是这样运行的。什么不完全有效?我实际上只是在您的代码中添加了 matchNode.AddRange(...) 并且它有效。
    • 您保留“List matchNode = new List();”照原样?
    • 是的,其他一切都保持不变。除了我明确更改的内容。
    • 嘿,谢谢。我只需要删除 console.ReadLine();来自 TraverseXml 函数。
    • 好吧,Console.ReadLine 不会阻止这个工作,它只是乏味。下次如果您能准确地告诉我们明显的错误是什么,而不是“它不工作”,将会很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2018-06-20
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多