1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Xml;
- using System.Xml.Linq;
- namespace DuplicatesInTMX
- {
- class Program
- {
- static XElement ReadHeader(XmlReader reader)
- {
- if (reader == null)
- throw new ArgumentNullException("reader");
- reader.MoveToContent();
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element
- && reader.Name == "header")
- {
- var header = XElement.ReadFrom(reader) as XElement;
- return header;
- }
- }
- return null;
- }
- static IEnumerable<XElement> NoDuplicatedSource(XmlReader reader)
- {
- if (reader == null)
- throw new ArgumentNullException("reader");
- var duplicates = new Dictionary<string, bool>();
- while (reader.Read())
- {
- if (reader.NodeType == XmlNodeType.Element
- && reader.Name == "tu")
- {
- var tu = XElement.ReadFrom(reader) as XElement;
- var tuv = tu.Element("tuv");
- if (tuv == null)
- continue;
- var source = tuv.Element("seg");
- if (source == null)
- continue;
- var sourceText = source.ToString();
- if (duplicates.ContainsKey(sourceText))
- continue;
- duplicates.Add(sourceText, true);
- yield return tu;
- }
- }
- }
- static void Main(string[] args)
- {
- if (!args.Any())
- {
- Console.WriteLine("You need to specify a path to TMX file!");
- return;
- }
- XmlReaderSettings settings = new XmlReaderSettings()
- {
- DtdProcessing = DtdProcessing.Ignore
- };
- using (XmlReader reader = XmlReader.Create(args[0], settings))
- {
- var version = new XAttribute("version", "1.4");
- var root = new XStreamingElement("tmx");
- root.Add(version);
- var header = ReadHeader(reader);
- if (header == null)
- throw new NullReferenceException("There's no header in the file!");
- root.Add(header);
- var body = new XStreamingElement("body",
- from el in NoDuplicatedSource(reader)
- select el);
- root.Add(body);
- root.Save("output.tmx");
- }
- }
- }
- }
|