导入XML并创建目录C#

时间:2016-08-04 13:11:02

标签: c# xml path

我还在开始使用XML文件。我想用XML创建目录,我有这个功能:

RunCommand是一个执行comanda_cmd的函数 第一个,第二个是字符串

private void ProcesNode(XmlNode node, string parentPath, string path, string first, string second, string BuiltUnit, string item)
{

    if (!node.HasChildNodes || ((node.ChildNodes.Count == 2) && (node.FirstChild is System.Xml.XmlText)))
    {
        //MessageBox.Show(parentPath + "/" + node.Name);
    }
    else
    {
        foreach (XmlNode child in node.ChildNodes)
        {
            comanda_cmd = first + "/" + parentPath + second + "/" + parentPath + "/" + node.Name;
            string status = RunCommand(comanda_cmd + "/project.pj /n");
            //content = "_GEN_PROJECT/" + ProjectName + "/" + BuiltUnit + "/" + item + "/" + parentPath + "/" + node.Name + " already exist";
            //MessageBox.Show(content);
            //check_status(status, content);
            ProcesNode(child, parentPath + "/" + node.Name, path, first, second, BuiltUnit, item);
        }
    }
}

我有这个XML:

<unit>
<Unit1>
    <src>
        <i>
            <test1>
                <test_in1>
                    <test_in_out>
                        <t>
                        </t>
                    </test_in_out>
                </test_in1>
            </test1>
            <test2>
                <test_in2>
                </test_in2>
            </test2>
        </i>
    </src>
    <doc>
        <i>
            <test1>
                <test_in1>
                    <test_in_out>
                        <t>
                        </t>
                    </test_in_out>
                </test_in1>
            </test1>
            <test2>
                <test_in2>
                </test_in2>
            </test2>
        </i>
    </doc>
</Unit1>
<Unit2>
    <src>
        <i>
        </i>
    </src>
</Unit2>

</unit>

我调用ProcesNode,它会创建目录。例如:unit / Unit1 / src / i / test1 / test_in1 / test_in_out 但是没有创建最后一个目录(在我的情况下&#34; t&#34;)。

我哪里错了?为什么不创建最后一个目录?

1 个答案:

答案 0 :(得分:0)

最低级别的标记(如<t>标记)没有任何子节点。

Thatswhy你的if陈述

if (!node.HasChildNodes || ((node.ChildNodes.Count == 2) && (node.FirstChild is System.Xml.XmlText)))

true(因为!node.HasChildNodestrue). So for the tags on the last level you never enter the else`阻止(可能)创建目录。

看来你可以简单地把那部分(!node.HasChildNodes ||)留下来。如果没有子节点,则不会输入foreach循环。