private void StartNewSplit(ElementInfos elementQueue, IEnumerable <ElementInfo> tempQueue) { _currentWriter = _outputManager.GetXmlWriter(); _currentSplitInfo.FileName = _outputManager.CurrentFileName; _currentSplitInfo.FullPath = _outputManager.CurrentFileFullPath; _currentWriter.WriteStartDocument(); _currentWriter.WriteStartElement(VwNamespacePrefix, FragmentElementlName, ItJakubTeiNamespace); _currentWriter.WriteAttributeString(XmlnsAttributeName, TeiNamespace); _currentWriter.WriteAttributeString(NAttributeName, _sourceDocumentInfo.XmlId); _currentWriter.WriteAttributeString(ChangeAttributeName, _sourceDocumentInfo.VersionId); if (tempQueue == null) { return; } foreach (ElementInfo elementInfo in tempQueue) { ElementInfo newElementInfo = elementInfo.Clone(); newElementInfo.Attributes.Add(new AttributeInfo(VwNamespacePrefix, ContinueAttributeName, ItJakubTeiNamespace, TrueValue)); WriteElementInfo(newElementInfo, _currentWriter); elementQueue.Push(elementInfo); } }
public void SplitOnStartingElement() { bool splittingStarted = (StartingElement == null); ElementInfos elementStack = new ElementInfos(); FileInfo xmlFileInfo = new FileInfo(XmlFile); string newFileFormat = xmlFileInfo.Name.Substring(0, xmlFileInfo.Name.Length - xmlFileInfo.Extension.Length) + NumberedXmlPattern; _outputManager = new OutputManager(); _outputManager.OutputDirectory = OutputDirectory; _outputManager.FileNameFormat = newFileFormat; using (XmlReader reader = XmlReader.Create(XmlFile)) { reader.MoveToContent(); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { bool isEmpty = reader.IsEmptyElement; if (!splittingStarted) { if (reader.Name == StartingElement) { splittingStarted = true; _currentWriter = _outputManager.GetXmlWriter(); _currentWriter.WriteStartDocument(); _currentWriter.WriteStartElement(FragmentElementlName, TeiNamespace); } } if (!splittingStarted) { continue; } ElementInfo element = ElementInfo.GetElementInfo(reader); //GetElementInfo(reader); elementStack.Push(element); WriteElementInfo(element, _currentWriter); if (!isEmpty) { continue; } elementStack.Pop(); } else if (reader.NodeType == XmlNodeType.EndElement) { if (!splittingStarted) { continue; } string name = reader.Name; ElementInfo elementPeak = elementStack.Peek(); if (elementPeak.Name != name) { Console.WriteLine("Chyba element × reader ({0} × {1})", elementPeak.Name, name); } else { Transformace.SerializeNode(reader, _currentWriter); elementStack.Pop(); } if (name == StartingElement) { elementStack.CloneReverse(); while (elementStack.Count > 0) { _currentWriter.WriteEndElement(); elementStack.Pop(); } _currentWriter.WriteFullEndElement(); _currentWriter.Close(); splittingStarted = false; //currentWriter = outputManager.GetXmlWriter(); } } else { if (splittingStarted) { Transformace.SerializeNode(reader, _currentWriter); } } } } }