Skip to content

Instantly share code, notes, and snippets.

@rarous
Created October 29, 2013 10:55
Show Gist options
  • Save rarous/7212499 to your computer and use it in GitHub Desktop.
Save rarous/7212499 to your computer and use it in GitHub Desktop.
protected XElement TransformDates(XElement inputXml, string schema)
{
var inputXmlDoc = new XmlDocument();
inputXmlDoc.Load(inputXml.CreateReader());
var asm = GetType().Assembly;
//get namespace from xml
var xmlString = inputXmlDoc.DocumentElement.OuterXml;
var xPathXml = new XPathDocument(inputXml.CreateReader());
var navigator = xPathXml.CreateNavigator();
navigator.MoveToFollowing(XPathNodeType.Element);
var namespaces = navigator.GetNamespacesInScope(XmlNamespaceScope.All);
string nms;
namespaces.TryGetValue(string.Empty, out nms);
//namespace
var ns = new XmlNamespaceManager(inputXmlDoc.NameTable);
ns.AddNamespace("x", nms);
//load schema
var tr = new XmlTextReader(new StringReader(xmlString));
var vr = new XmlReaderSettings
{
ValidationType = ValidationType.Schema
};
using (var resource = asm.GetManifestResourceStream(asm.GetManifestResourceNames().First(m => m.EndsWith(schema))))
{
using (var r = XmlReader.Create(resource))
{
vr.Schemas.Add(nms, r);
}
using (var reader = XmlReader.Create(tr, vr))
{
reader.MoveToContent();
while (reader.Read())
{
if (reader.NodeType != XmlNodeType.Element)
continue;
var name = reader.Name;
try
{
if (reader.ValueType != typeof(DateTime))
continue;
var el = XNode.ReadFrom(reader) as XElement;
if (el != null)
inputXmlDoc.DocumentElement.SelectSingleNode("//x:" + name, ns).InnerText = DateTime.Parse(el.Value).ToString("ddMMyyyy");
}
catch
{
}
}
}
}
return XElement.Parse(inputXmlDoc.OuterXml);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment