IEnumerable<ParseInfo> GetParseInfo(StreamReader reader) { var doc = XDocument.Load(reader); XNamespace nsRdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; XNamespace nsEt = "http://ns.exiftool.ca/1.0/"; var tags = new Dictionary<string, ParseInfo>(); var els = doc.Element(nsRdf + "RDF").Element(nsRdf + "Description"); foreach(var el in els.Elements()) { if(string.Equals(el.Name.LocalName, EXIF_TOOL_TAG_NAME, StringComparison.OrdinalIgnoreCase)) { _exifToolTagCounter++; } var tableName = el.Attribute(nsEt + "table").Value; var tagId = el.Attribute(nsEt + "id").Value; var val = el.Value; var key = TagInfo.GenerateLookupKey(tableName, tagId); if(!IsNumericSection) { tags[key] = new ParseInfo { TableName = tableName, TagId = tagId, Value = val }; } else { if(tags.ContainsKey(key)) { tags[key].NumberValue = val; } else { tags[key] = new ParseInfo { TableName = tableName, TagId = tagId, NumberValue = val }; } } } return tags.Values; }
Tag BuildTag(ParseInfo pi) { var ti = GetTagInfo(pi.TableName, pi.TagId); var tag = CreateSpecificTag(ti, pi.NumberValue); tag.TagInfo = ti; tag.Value = pi.Value; tag.NumberValue = pi.NumberValue; return tag; }