将XmlNode添加到XmlElement
本文关键字:XmlElement 添加 XmlNode | 更新日期: 2023-09-27 17:57:54
我从一个web服务处收到一个soap信封,里面有客户数据,如姓名和地址等。地址不包含城市/郊区,而是邮政编码。我把所有城市和郊区的邮政编码都放在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;
}
}
}
}
我不知道在我注释掉代码的地方该怎么办。有什么建议吗?关于如何提高效率的提示也将不胜感激。
提前谢谢。
如果没有实际看到现有的XML结构和所需的新XML结构,就很难知道。基本上,我假设您想要一个新的XML节点,其中包含与postcode
元素相同级别的郊区。
在这种情况下,我使用了:
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);
}