0

我不确定这是否可能,但是...

我有一大块文本(kml 格式,基本上是 xml)它包含看起来像这样的代码部分(大约 75 个)

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

我需要做的是,在每个 *code 不同的地方设置 *bgcolor,一旦我有了 *code,我就可以在我的数据库中查看并分配正确的颜色。

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

干杯

4

2 回答 2

0

如果是 XML,那么您可以使用 LINQ to 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");

相关:使用 C# 读取 XML/KML 文件

于 2013-05-17T09:46:55.293 回答
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);
}
于 2013-05-18T17:24:29.023 回答