Пример #1
0
 public override void WriteDocType(string name, string pubid, string sysid, string subset)
 {
     if (_checkNames)
     {
         ValidateQName(name);
     }
     if (_checkValues)
     {
         if (pubid != null)
         {
             int i;
             if ((i = _xmlCharType.IsPublicId(pubid)) >= 0)
             {
                 throw XmlConvert.CreateInvalidCharException(pubid, i);
             }
         }
         if (sysid != null)
         {
             CheckCharacters(sysid);
         }
         if (subset != null)
         {
             CheckCharacters(subset);
         }
     }
     if (_replaceNewLines)
     {
         sysid  = ReplaceNewLines(sysid);
         pubid  = ReplaceNewLines(pubid);
         subset = ReplaceNewLines(subset);
     }
     writer.WriteDocType(name, pubid, sysid, subset);
 }
Пример #2
0
        // Verification method for XML public ID characters as defined in XML spec production [13] PubidChar.
        // Throws XmlException if invalid character is found, otherwise returns the input string.
        public static string VerifyPublicId(string publicId)
        {
            if (publicId == null)
            {
                throw new ArgumentNullException(nameof(publicId));
            }

            // returns the position of invalid character or -1
            int pos = s_xmlCharType.IsPublicId(publicId);

            if (pos != -1)
            {
                throw CreateInvalidCharException(publicId, pos, ExceptionType.XmlException);
            }

            return(publicId);
        }
Пример #3
0
        public override bool Read()
        {
            switch (_state)
            {
            case State.Initial:
                _state = State.Interactive;
                if (base.reader.ReadState == ReadState.Initial)
                {
                    goto case State.Interactive;
                }
                break;

            case State.Error:
                return(false);

            case State.InReadBinary:
                FinishReadBinary();
                _state = State.Interactive;
                goto case State.Interactive;

            case State.Interactive:
                if (!base.reader.Read())
                {
                    return(false);
                }
                break;

            default:
                Debug.Assert(false);
                return(false);
            }

            XmlNodeType nodeType = base.reader.NodeType;

            if (!_checkCharacters)
            {
                switch (nodeType)
                {
                case XmlNodeType.Comment:
                    if (_ignoreComments)
                    {
                        return(Read());
                    }
                    break;

                case XmlNodeType.Whitespace:
                    if (_ignoreWhitespace)
                    {
                        return(Read());
                    }
                    break;

                case XmlNodeType.ProcessingInstruction:
                    if (_ignorePis)
                    {
                        return(Read());
                    }
                    break;

                case XmlNodeType.DocumentType:
                    if (_dtdProcessing == DtdProcessing.Prohibit)
                    {
                        Throw(ResXml.Xml_DtdIsProhibitedEx, string.Empty);
                    }
                    else if (_dtdProcessing == DtdProcessing.Ignore)
                    {
                        return(Read());
                    }
                    break;
                }
                return(true);
            }
            else
            {
                switch (nodeType)
                {
                case XmlNodeType.Element:
                    if (_checkCharacters)
                    {
                        // check element name
                        ValidateQName(base.reader.Prefix, base.reader.LocalName);

                        // check values of attributes
                        if (base.reader.MoveToFirstAttribute())
                        {
                            do
                            {
                                ValidateQName(base.reader.Prefix, base.reader.LocalName);
                                CheckCharacters(base.reader.Value);
                            } while (base.reader.MoveToNextAttribute());

                            base.reader.MoveToElement();
                        }
                    }
                    break;

                case XmlNodeType.Text:
                case XmlNodeType.CDATA:
                    if (_checkCharacters)
                    {
                        CheckCharacters(base.reader.Value);
                    }
                    break;

                case XmlNodeType.EntityReference:
                    if (_checkCharacters)
                    {
                        // check name
                        ValidateQName(base.reader.Name);
                    }
                    break;

                case XmlNodeType.ProcessingInstruction:
                    if (_ignorePis)
                    {
                        return(Read());
                    }
                    if (_checkCharacters)
                    {
                        ValidateQName(base.reader.Name);
                        CheckCharacters(base.reader.Value);
                    }
                    break;

                case XmlNodeType.Comment:
                    if (_ignoreComments)
                    {
                        return(Read());
                    }
                    if (_checkCharacters)
                    {
                        CheckCharacters(base.reader.Value);
                    }
                    break;

                case XmlNodeType.DocumentType:
                    if (_dtdProcessing == DtdProcessing.Prohibit)
                    {
                        Throw(ResXml.Xml_DtdIsProhibitedEx, string.Empty);
                    }
                    else if (_dtdProcessing == DtdProcessing.Ignore)
                    {
                        return(Read());
                    }
                    if (_checkCharacters)
                    {
                        ValidateQName(base.reader.Name);
                        CheckCharacters(base.reader.Value);

                        string str;
                        str = base.reader.GetAttribute("SYSTEM");
                        if (str != null)
                        {
                            CheckCharacters(str);
                        }

                        str = base.reader.GetAttribute("PUBLIC");
                        if (str != null)
                        {
                            int i;
                            if ((i = _xmlCharType.IsPublicId(str)) >= 0)
                            {
                                Throw(ResXml.Xml_InvalidCharacter, XmlException.BuildCharExceptionArgs(str, i));
                            }
                        }
                    }
                    break;

                case XmlNodeType.Whitespace:
                    if (_ignoreWhitespace)
                    {
                        return(Read());
                    }
                    if (_checkCharacters)
                    {
                        CheckWhitespace(base.reader.Value);
                    }
                    break;

                case XmlNodeType.SignificantWhitespace:
                    if (_checkCharacters)
                    {
                        CheckWhitespace(base.reader.Value);
                    }
                    break;

                case XmlNodeType.EndElement:
                    if (_checkCharacters)
                    {
                        ValidateQName(base.reader.Prefix, base.reader.LocalName);
                    }
                    break;

                default:
                    break;
                }
                _lastNodeType = nodeType;
                return(true);
            }
        }