Beispiel #1
0
        private static XElement CreateXmlElement(UrlAddress urlAddress)
        {
            XElement xmlElement  = new XElement("urlAdress");
            XElement hostElement = new XElement("host", new XAttribute("name", urlAddress.HostName));

            xmlElement.Add(hostElement);

            XElement uri = new XElement("uri");

            foreach (var item in urlAddress.Segments)
            {
                uri.Add(new XElement("segment", item));
            }

            xmlElement.Add(uri);

            XElement parameters = new XElement("parameters");

            foreach (var item in urlAddress.Parameters)
            {
                parameters.Add(new XElement(
                                   "parameter",
                                   new XAttribute("value", item.Value),
                                   new XAttribute("key", item.Key)));
            }

            if (parameters.HasElements)
            {
                xmlElement.Add(parameters);
            }

            return(xmlElement);
        }
        /// <summary>
        /// Parses string to UrlAddress class.
        /// </summary>
        /// <param name="sourceString">String to parse.</param>
        /// <returns></returns>
        public UrlAddress Parse(string sourceString)
        {
            _ = sourceString ?? throw new ArgumentNullException();
            _ = validator ?? throw new ArgumentNullException();

            if (!validator.IsValid(sourceString))
            {
                throw new ArgumentException("Source string is not a valid URL", nameof(sourceString));
            }

            UrlAddress url = new UrlAddress();

            url.Protocol = sourceString.Substring(0, sourceString.IndexOf(schemeHostSeparator));
            sourceString = sourceString.Substring(sourceString.IndexOf(schemeHostSeparator) + 3);

            url.HostName = sourceString.Substring(0, sourceString.IndexOf(segmentSeparator));
            sourceString = sourceString.Substring(sourceString.IndexOf(segmentSeparator) + 1);

            if (sourceString.Contains(beginOfParamaters))
            {
                var segments = sourceString.Substring(0, sourceString.IndexOf(beginOfParamaters));
                foreach (string segment in segments.Split(new char[] { segmentSeparator }, StringSplitOptions.RemoveEmptyEntries))
                {
                    url.Segments.Add(segment);
                }

                sourceString = sourceString.Substring(sourceString.IndexOf(beginOfParamaters) + 1);

                var parameters = sourceString.Split(parametersSeparator);
                foreach (var parameter in parameters)
                {
                    var keyvaluePair = parameter.Split(keyValueSeparator);
                    url.Parameters.Add(keyvaluePair[0], keyvaluePair[1]);
                }
            }
            else
            {
                foreach (var segment in sourceString.Split(new char[] { segmentSeparator }, StringSplitOptions.RemoveEmptyEntries))
                {
                    url.Segments.Add(segment);
                }
            }

            return(url);
        }