1

これは.NET2.0プロジェクトです。まず最初に、何を解析するかをxmlします。

<?xml version="1.0" standalone="yes"?>
<DocumentElement>
  <diagramer>
    <PKTABLE_NAME>TECH_Y_Category</PKTABLE_NAME>
    <FKTABLE_NAME>TECH_File</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>TECH_File</PKTABLE_NAME>
    <FKTABLE_NAME>TECH_Version</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>TECH_Group</PKTABLE_NAME>
    <FKTABLE_NAME>TECH_D_Group_File_Version</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>TECH_Layout</PKTABLE_NAME>
    <FKTABLE_NAME>TECH_File</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>CK_List</PKTABLE_NAME>
    <FKTABLE_NAME>CK_Vote</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>CK_List</PKTABLE_NAME>
    <FKTABLE_NAME>CK_Score</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>TECH_Page</PKTABLE_NAME>
    <FKTABLE_NAME>TECH_Page</FKTABLE_NAME>
  </diagramer>
  <diagramer>
    <PKTABLE_NAME>CK_List</PKTABLE_NAME>
    <FKTABLE_NAME>Comments</FKTABLE_NAME>
  </diagramer>
</DocumentElement>

ご覧のとおり、いくつかのPKTABLE_NAME値は同じです。以下のコードを使用して、そのxmlをループします。

StringBuilder sb = new StringBuilder();
foreach (XmlNode items in diagramTables)
{
  string pkTable = items["PKTABLE_NAME"].InnerText.Replace("_",@"\_");
  string fkTable = items["FKTABLE_NAME"].InnerText.Replace("_",@"\_");

  sb.Append(pkTable);
  sb.Append(" got ");
  sb.Append( fkTable + Environment.NewLine);

}

それは私が達成したいことを正確に示しているわけではありません。すべての値を取得したいのですが、1回だけにします(繰り返したくない)。結局のところ、私は上記のxmlからこのようなsometinginghを書きたいです:

  • TECH_Y_Category TECH_Fileを取得しました
  • TECH_FileTECH_Versionを取得しました
  • TECH_GroupTECH_D_Group_File_Versionを取得しました
  • TECH_LayoutTECH_Fileを取得しました
  • CK_ListCK_Voteを取得しました| CK_Score | コメントコメント
  • TECH_PageTECH_Pageを取得しました

私が達成しようとしていることを理解していただければ幸いです。

編集。

Morawskiのコードは私にとって完璧に機能したので、問題は解決しました;)。

4

2 に答える 2

1

何かのようなもの:

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();
foreach (XmlNode items in diagramTables)
{
  string pkTable = items["PKTABLE_NAME"].InnerText.Replace("_",@"\_");
  string fkTable = items["FKTABLE_NAME"].InnerText.Replace("_",@"\_");
  if (!dict.ContainsKey(pkTable))
  {
    dict.Add(pkTable, new List<string>());
  }
  if (!dict[pkTable].Contains(fkTable))
  {
      dict[pkTable].Add(fkTable);
  }
}
sb.Append("========================================================="); // making it easier for you
foreach(KeyValuePair<string, List<string>> kvp in dict)
{
  sb.Append(kvp.Key);
  sb.Append(" got ");
  sb.AppendLine(String.Join("|", kvp.Value.ToArray()));
}
sb.Append("========================================================="); // making it easier for you
于 2012-07-31T10:37:46.450 に答える
0

結果をDictionary次の場所に保存しListます。

var nodes = new Dictionary<string, List<string>>();

XmlDocument document = new XmlDocument();

foreach (XmlNode childNode in document.ChildNodes)
{
    if(nodes.ContainsKey(childNode.Name))
        nodes[childNode.Name].Add(childNode.InnerText);
    else
        nodes.Add(childNode.Name, new List<string> {childNode.InnerText});
}

// and printing

foreach (var node in nodes)
{
    string values = node.Value.Aggregate("", (current, s) => current + ("|" + s));
    Console.WriteLine(node.Key + " gots " + values);
}
于 2012-07-31T10:38:27.983 に答える