2013-05-17 14 views
0

林不知道如果这是可能的,但...每个单词(其中在第一个字是“东西”)

我有文字(KML格式,这基本上是XML)的大块它包含部分代码看起来像这样(其中约75)

<color>ff0780dd</color> *bgcolor 
<th>MSOA11CD</th> *code 
<td>E02001618</td> 

什么,我需要做的是,将* BGCOLOR其中每个*代码是不同的,一旦我有*代码我可以看看我的数据库中并分配正确的颜色。

我可以使用正则表达式来获取以“MSOA + 4chars”开头的每个*代码,但是如何编辑上面的颜色代码?

干杯

回答

0

如果是XML,那么你可以使用LINQ到XML

// find nodes 
XNamespace ns = "url...."; 
var doc = XDocument.Load("Test.xml"); 
var items =(from item in doc.Descendants(ns+"Document").Descendants(ns+"Item") 
      where CheckItem(item.Element(ns+"th").Value) 
      select item).ToList(); 
// update nodes 
for (int i = 0; i < items.Count(); i++) 
{ 
    items[i].SetElementValue(ns + "color", GetColor(items[i].Value)); 
} 
// saving updated xml 
doc.Save("Test.xml"); 

相关:Reading in XML/KML files using C#

0

下面是使用正则表达式的解决方案。该表达式中的匹配捕获示例中的COLOR标签和TH标签。

<color>[^<]+</color>\s*<th>MSOA(\w+)</th> 

第一个捕获组包含4位MSOA代码。然后您可以用具有所需更新值的新标签替换整个匹配。这里是我在LINQPad中测试的C#中的一个例子。

void Main() { 
    string inputString = @" 
     <color>ff0780dd</color> 
     <th>MSOA11CD</th> 
     <td>E02001618</td>"; 
    string result = Regex.Replace(inputString, @"<color>[^<]+</color>\s*<th>MSOA(\w+)</th>", new MatchEvaluator(ComputeReplacement), RegexOptions.IgnoreCase | RegexOptions.Multiline); 
    Console.Out.WriteLine(result); 
} 

public String ComputeReplacement(Match m) { 
    const int GRP_MSOA_CODE = 1; 
    string msoaCode = m.Groups[GRP_MSOA_CODE].Value; 
    string colorCode = "SOME COLOR CODE"; //Get the code to use between the "color" tags from your DB. 
    return String.Format("<color>{0}</color>\n<th>MSOA{1}</th>", colorCode, msoaCode); 
} 
相关问题