2016-08-04 64 views
0

我還在XML文件的開頭。我想創建一個XML目錄,我有這樣的功能:導入XML並創建目錄C#

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 但最後一個目錄(在我的情況下是「t」)沒有創建。

我在哪裏錯了?爲什麼它不創建最後一個目錄?

+0

對於最低標籤(''), 'if'條件'(!node.HasChildren || ...)'是'true',所以你不要進入創建目錄的'else'塊。 –

+0

你是對的! 非常感謝Rene Vogt –

回答

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循環。