2

名前や住所などの顧客データが記載された石鹸の封筒をWebサービスから受け取ります。住所には市/郊外ではなく郵便番号が含まれています。私はすべての市と郊外の郵便番号をCSVファイルに入れているので、各郵便番号に正しい名前を挿入したいと思います。データベースなどに保存できますが、これはデータを渡す前にノードを挿入する方法に関するものです。

コードは次のようなものです:

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(searchResponse);

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xDoc.NameTable);
nsmgr.AddNamespace("ns", wsNamespace);

XmlNodeList postCodeNodes = xDoc.SelectNodes("//ns:postcode", nsmgr);
string applicationPath = AppDomain.CurrentDomain.BaseDirectory;

foreach (XmlNode node in postCodeNodes)
{ 
    using (StreamReader readFile = new StreamReader(applicationPath + "postcodes.csv"))
    {
        string line;
        string[] row;

        while ((line = readFile.ReadLine()) != null)
        {
                row = line.Split(',');
                if (row[0].ToString() == node.InnerText)
                {
                    string suburb = row[1].ToString();
                    //XmlNode ndSuburb = xDoc.CreateElement("suburb");
                    //ndSuburb.Value = suburb;
                    //node.ParentNode.AppendChild(ndSuburb);
                    break;
                }
        }
    }
}

コードをコメントアウトした場所で何をすべきかわかりません。助言がありますか?これをより効率的にするためのヒントもいただければ幸いです。

前もって感謝します。

4

1 に答える 1

2

まあ、実際に存在するXML構造と目的の新しいXML構造を見ずに知るのは少し難しいです。postcode基本的に、要素と同じレベルの郊外を含む新しいXMLノードが必要だと思います。

その場合、私は以下を使用しました:

XmlElement elem = xDoc.CreateElement("suburb");
elem.InnerText = ...;
node.ParentNode.AppendChild(elem);

編集
効率について:「郵便番号ファイル」を一度だけ読んで、郵便番号をキーとして、郊外を値として含む辞書にエントリを追加してみませんか?これは、毎回ファイルを読み取るよりもはるかに高速です。

Dictionary<string, string> postCodeMap = new Dictionary<string, string>();
string[] lines = File.ReadAllLines(...);
foreach (string line in lines)
{
   string[] parts = line.Split(',');
   postCodeMap[parts[0]] = parts[1];
}

そして後で行います:

foreach (XmlNode node in postCodeNodes)
{ 
    string suburb = postCodeMap[node.InnerText];

    XmlElement elem = xDoc.CreateElement("suburb");
    elem.InnerText = suburb;
    node.ParentNode.AppendChild(elem);
}
于 2011-05-30T14:16:12.210 に答える