예제 #1
0
 public void DTDZuweisen(DTD dtd)
 {
     foreach (DTDChildElemente child in this._children)
     {
         child.DTDZuweisen(dtd);
     }
     this._dtd = dtd;
 }
예제 #2
0
        private void PruefeAlleTestmuster(List <DTDTestmuster> alleMuster, XMLCursorPos cursorPos)
        {
            XmlNode    aktNode = cursorPos.AktNode;
            DTDElement element;

            if (cursorPos.PosAmNode == XMLCursorPositionen.CursorInDemLeeremNode)
            {
                element = this._dtd.DTDElementByName(DTD.GetElementNameFromNode(aktNode), false);
            }
            else
            {
                if (aktNode.OwnerDocument == null || aktNode.OwnerDocument.DocumentElement == null)
                {
                    return;
                }
                if (aktNode == aktNode.OwnerDocument.DocumentElement)
                {
                    using (List <DTDTestmuster> .Enumerator enumerator = alleMuster.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            DTDTestmuster current = enumerator.Current;
                            if (current.ElementName == aktNode.Name)
                            {
                                current.Erfolgreich = true;
                            }
                        }
                        return;
                    }
                }
                else
                {
                    element = this._dtd.DTDElementByName(DTD.GetElementNameFromNode(aktNode.ParentNode), false);
                }
            }
            foreach (DTDTestmuster muster in alleMuster)
            {
                if (element == null)
                {
                    muster.Erfolgreich = false;
                }
                else if (!muster.Erfolgreich)
                {
                    muster.Erfolgreich = this.PasstMusterInElement(muster, element);
                }
            }
        }
예제 #3
0
        public bool IstDerNodeAnDieserStelleErlaubt(XmlNode node)
        {
            if (node.ParentNode is XmlDocument)
            {
                return(true);
            }
            XMLCursorPos cursorPos = new XMLCursorPos();

            cursorPos.CursorSetzen(node, XMLCursorPositionen.CursorAufNodeSelbstVorderesTag);
            DTDTestmuster testMuster = this.CreateTestMuster(DTD.GetElementNameFromNode(node), cursorPos);

            this.PruefeAlleTestmuster(new List <DTDTestmuster>()
            {
                testMuster
            }, cursorPos);
            return(testMuster.Erfolgreich);
        }
예제 #4
0
        public bool IstDerNodeAnDieserStelleErlaubt(XmlNode node)
        {
            if (node.ParentNode is XmlDocument)
            {
                return(true);
            }
            XMLCursorPos xMLCursorPos = new XMLCursorPos();

            xMLCursorPos.CursorSetzen(node, XMLCursorPositionen.CursorAufNodeSelbstVorderesTag);
            string               elementNameFromNode = DTD.GetElementNameFromNode(node);
            DTDTestmuster        dTDTestmuster       = this.CreateTestMuster(elementNameFromNode, xMLCursorPos);
            List <DTDTestmuster> list = new List <DTDTestmuster>();

            list.Add(dTDTestmuster);
            this.PruefeAlleTestmuster(list, xMLCursorPos);
            if (dTDTestmuster.Erfolgreich)
            {
                return(true);
            }
            return(false);
        }
예제 #5
0
        private void PruefeAlleTestmuster(List <DTDTestmuster> alleMuster, XMLCursorPos cursorPos)
        {
            XmlNode    aktNode = cursorPos.AktNode;
            DTDElement dTDElement;

            if (cursorPos.PosAmNode == XMLCursorPositionen.CursorInDemLeeremNode)
            {
                dTDElement = this._dtd.DTDElementByName(DTD.GetElementNameFromNode(aktNode), false);
                goto IL_00dd;
            }
            if (aktNode.OwnerDocument != null && aktNode.OwnerDocument.DocumentElement != null)
            {
                if (aktNode != aktNode.OwnerDocument.DocumentElement)
                {
                    dTDElement = this._dtd.DTDElementByName(DTD.GetElementNameFromNode(aktNode.ParentNode), false);
                    goto IL_00dd;
                }
                foreach (DTDTestmuster item in alleMuster)
                {
                    if (item.ElementName == aktNode.Name)
                    {
                        item.Erfolgreich = true;
                    }
                }
            }
            return;

IL_00dd:
            foreach (DTDTestmuster item2 in alleMuster)
            {
                if (dTDElement == null)
                {
                    item2.Erfolgreich = false;
                }
                else if (!item2.Erfolgreich)
                {
                    item2.Erfolgreich = this.PasstMusterInElement(item2, dTDElement);
                }
            }
        }
예제 #6
0
 public DTDNodeEditCheck(DTD dtd)
 {
     this._dtd = dtd;
 }
예제 #7
0
        private DTDTestmuster CreateTestMuster(string elementName, XMLCursorPos cursorPos)
        {
            XmlNode       aktNode = cursorPos.AktNode;
            DTDTestmuster dtdTestmuster;

            if (cursorPos.PosAmNode == XMLCursorPositionen.CursorInDemLeeremNode)
            {
                dtdTestmuster = new DTDTestmuster(elementName, DTD.GetElementNameFromNode(aktNode));
                dtdTestmuster.AddElement(elementName);
            }
            else
            {
                if (aktNode.ParentNode is XmlDocument)
                {
                    throw new ApplicationException(ResReader.Reader.GetString("FuerRootElementKeinTestmuster"));
                }
                dtdTestmuster = new DTDTestmuster(elementName, DTD.GetElementNameFromNode(aktNode.ParentNode));
                for (XmlNode node = aktNode.ParentNode.FirstChild; node != null; node = node.NextSibling)
                {
                    if (!(node is XmlWhitespace))
                    {
                        if (node == aktNode)
                        {
                            if (node is XmlComment)
                            {
                                dtdTestmuster.AddElement("#COMMENT");
                            }
                            else if (this._dtd.DTDElementByName(DTD.GetElementNameFromNode(aktNode), false) != null)
                            {
                                switch (cursorPos.PosAmNode)
                                {
                                case XMLCursorPositionen.CursorVorDemNode:
                                    if (elementName == null)
                                    {
                                        throw new ApplicationException("CreateTestMuster: Löschen darf bei XMLCursorPositionen.CursorVorDemNode nicht geprüft werden!");
                                    }
                                    dtdTestmuster.AddElement(elementName);
                                    dtdTestmuster.AddElement(DTD.GetElementNameFromNode(aktNode));
                                    break;

                                case XMLCursorPositionen.CursorAufNodeSelbstVorderesTag:
                                case XMLCursorPositionen.CursorAufNodeSelbstHinteresTag:
                                    if (elementName != null)
                                    {
                                        dtdTestmuster.AddElement(elementName);
                                        break;
                                    }
                                    break;

                                case XMLCursorPositionen.CursorInDemLeeremNode:
                                    if (elementName == null)
                                    {
                                        throw new ApplicationException("CreateTestMuster: Löschen darf bei XMLCursorPositionen.CursorHinterDemNode nicht geprüft werden!");
                                    }
                                    throw new ApplicationException("CreateTestMuster: CursorInDemLeeremNode can´t be handled at this place!");

                                case XMLCursorPositionen.CursorInnerhalbDesTextNodes:
                                    if (elementName == null)
                                    {
                                        throw new ApplicationException("CreateTestMuster: Löschen darf bei XMLCursorPositionen.CursorInnerhalbDesTextNodes nicht geprüft werden!");
                                    }
                                    if (DTD.GetElementNameFromNode(aktNode) != "#PCDATA")
                                    {
                                        throw new ApplicationException("CreateTestMuster: CursorInnerhalbDesTextNodes angegeben, aber node.name=" + DTD.GetElementNameFromNode(aktNode));
                                    }
                                    dtdTestmuster.AddElement("#PCDATA");
                                    dtdTestmuster.AddElement(elementName);
                                    dtdTestmuster.AddElement("#PCDATA");
                                    break;

                                case XMLCursorPositionen.CursorHinterDemNode:
                                    if (elementName == null)
                                    {
                                        throw new ApplicationException("CreateTestMuster: Löschen darf bei XMLCursorPositionen.CursorHinterDemNode nicht geprüft werden!");
                                    }
                                    dtdTestmuster.AddElement(DTD.GetElementNameFromNode(aktNode));
                                    dtdTestmuster.AddElement(elementName);
                                    break;

                                default:
                                    throw new ApplicationException("Unknown XMLCursorPositionen value:" + (object)cursorPos.PosAmNode);
                                }
                            }
                        }
                        else
                        {
                            dtdTestmuster.AddElement(DTD.GetElementNameFromNode(node));
                        }
                    }
                }
            }
            return(dtdTestmuster);
        }
예제 #8
0
 public DTDElement DTDElementByNode_(XmlNode node, bool fehlerWennNichtVorhanden)
 {
     return(this.DTDElementByNameIntern_(DTD.GetElementNameFromNode(node), fehlerWennNichtVorhanden));
 }