我有一些像
这样的输入字符串<Parameters><job>true</job><BeginDate>August2017</BeginDate><processed>true</processed></Parameters>
我必须提取BeginDate
值并将其替换为实际的日期时间值。所以输出应该看起来像
<Parameters><job>true</job><BeginDate>08/01/2017</BeginDate><processed>true</processed></Parameters>
我能够找到August2017
并将其替换为实际日期,但我无法将其替换为原始日期。
Match match = Regex.Match(customDate, @"<BeginDate>([A-Za-z0-9\-]+)\<\/BeginDate>", RegexOptions.IgnoreCase);
if (match.Success)
{
string key = match.Groups[1].Value;
var newDate = DateTime.ParseExact(key, "MMMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
???? how to replace newDate back to original ????
}
答案 0 :(得分:1)
var xDoc = XDocument.Parse(inputString);
var BeginDate = xDoc.Descendants("BeginDate").First();
BeginDate.Value = "08/08/2017";
var outputString = xDoc.ToString();
答案 1 :(得分:1)
您可以使用替换中预期的原始格式。
customDate = customDate.Replace(newDate.ToString("MMMMyyyy"), newDate.ToString("MM/dd/yyyy"));
考虑另一种出现的方法是XML:
var xe = System.Xml.Linq.XElement.Parse(customDate);
if(DateTime.TryParseExact(xe.Element("BeginDate").Value, "MMMMyyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.NoCurrentDateDefault, out var newDate))
{
xe.Element("BeginDate").Value = newDate.ToString("MM/dd/yyyy");
}
然后您可以使用以下方式获取字符串:
xe.ToString(System.Xml.Linq.SaveOptions.DisableFormatting)