Exemple #1
0
        static XmlType Parse(string match, ref string remaining, IXmlNamespaceResolver resolver, IXmlLineInfo lineinfo)
        {
            remaining = null;
            int  parensCount = 0;
            int  pos         = 0;
            bool isGeneric   = false;

            for (pos = 0; pos < match.Length; pos++)
            {
                if (match[pos] == '(')
                {
                    parensCount++;
                    isGeneric = true;
                }
                else if (match[pos] == ')')
                {
                    parensCount--;
                }
                else if (match[pos] == ',' && parensCount == 0)
                {
                    remaining = match.Substring(pos + 1);
                    break;
                }
            }
            var type = match.Substring(0, pos).Trim();

            IList <XmlType> typeArguments = null;

            if (isGeneric)
            {
                typeArguments = ParseExpression(
                    type.Substring(type.IndexOf('(') + 1, type.LastIndexOf(')') - type.IndexOf('(') - 1), resolver, lineinfo);
                type = type.Substring(0, type.IndexOf('('));
            }

            var split = type.Split(':');

            if (split.Length > 2)
            {
                return(null);
            }

            string prefix, name;

            if (split.Length == 2)
            {
                prefix = split [0];
                name   = split [1];
            }
            else
            {
                prefix = "";
                name   = split [0];
            }

            var namespaceuri = resolver.LookupNamespace(prefix);

            if (namespaceuri == null)
            {
                throw new XamlParseException($"No xmlns declaration for prefix '{prefix}'.", lineinfo, null);
            }
            return(new XmlType(namespaceuri, name, typeArguments));
        }
Exemple #2
0
 internal XmlAtomicValue(XmlSchemaType xmlType, string value, IXmlNamespaceResolver nsResolver)
 {
     if (value == null) throw new ArgumentNullException(nameof(value));
     if (xmlType == null) throw new ArgumentNullException(nameof(xmlType));
     _xmlType = xmlType;
     _objVal = value;
     if (nsResolver != null && (_xmlType.TypeCode == XmlTypeCode.QName || _xmlType.TypeCode == XmlTypeCode.Notation))
     {
         string prefix = GetPrefixFromQName(value);
         _nsPrefix = new NamespacePrefixForQName(prefix, nsResolver.LookupNamespace(prefix));
     }
 }
Exemple #3
0
 public IIdentity Get(string name, string identifier) => _store.Get(name, _manager.LookupNamespace(identifier));
Exemple #4
0
 public string?LookupNamespace(string prefix) => _other.LookupNamespace(prefix);
Exemple #5
0
		internal static XmlQualifiedName Parse (string name, IXmlNamespaceResolver resolver, bool considerDefaultNamespace)
		{
			int index = name.IndexOf (':');
			if (index < 0 && !considerDefaultNamespace)
				return new XmlQualifiedName (name);
			string prefix = index < 0 ? String.Empty : name.Substring (0, index);
			string localName = index < 0 ? name : name.Substring (index + 1);
			string ns = resolver.LookupNamespace (prefix);
			if (ns == null) {
				if (prefix.Length > 0)
					throw new ArgumentException ("Invalid qualified name.");
				else
					ns = String.Empty;
			}
			return new XmlQualifiedName (localName, ns);
		}
        private static XmlQualifiedName StringToQName(string value, IXmlNamespaceResolver nsResolver)
        {
            string prefix, localName, ns;

            value = value.Trim();

            // Parse prefix:localName
            try
            {
                ValidateNames.ParseQNameThrow(value, out prefix, out localName);
            }
            catch (XmlException e)
            {
                throw new FormatException(e.Message);
            }

            // Throw error if no namespaces are in scope
            if (nsResolver == null)
                throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoNamespace, value, prefix));

            // Lookup namespace
            ns = nsResolver.LookupNamespace(prefix);
            if (ns == null)
                throw new InvalidCastException(SR.Format(SR.XmlConvert_TypeNoNamespace, value, prefix));

            // Create XmlQualfiedName
            return new XmlQualifiedName(localName, ns);
        }
        public static void Clean(XElement proj, IXmlNamespaceResolver ns, string relativeSigningKeyPath = null)
        {
            var frameworkVersion = "v4.5.2";
            var frameworkProfile = "";
            var configurations = new[] { "Debug", "Test", "Release" };
            var platforms = new[] { "AnyCPU", "x86", "x64", "ARM" };

            if (proj.Name.LocalName == "VisualStudioProject")
                return;

            #region Remove Cruft
            proj.XPathSelectElements("//build:AutorunEnabled", ns).Remove();
            proj.XPathSelectElements("//build:PublishWizardCompleted", ns).Remove();
            proj.XPathSelectElements("//build:TargetZone", ns).Remove();
            proj.XPathSelectElements("//build:ApplicationManifest", ns).Remove();
            proj.XPathSelectElements("//build:DefaultClientScript", ns).Remove();
            proj.XPathSelectElements("//build:DefaultHTMLPageLayout", ns).Remove();
            proj.XPathSelectElements("//build:DefaultTargetSchema", ns).Remove();
            proj.XPathSelectElements("//build:FileUpgradeFlags", ns).Remove();
            proj.XPathSelectElements("//build:OldToolsVersion", ns).Remove();
            proj.XPathSelectElements("//build:UpgradeBackupLocation", ns).Remove();
            proj.XPathSelectElements("//build:IsWebBootstrapper", ns).Remove();
            proj.XPathSelectElements("//build:PublishUrl", ns).Remove();
            proj.XPathSelectElements("//build:Install", ns).Remove();
            proj.XPathSelectElements("//build:InstallFrom", ns).Remove();
            proj.XPathSelectElements("//build:UpdateEnabled", ns).Remove();
            proj.XPathSelectElements("//build:UpdateMode", ns).Remove();
            proj.XPathSelectElements("//build:UpdateInterval", ns).Remove();
            proj.XPathSelectElements("//build:UpdateIntervalUnits", ns).Remove();
            proj.XPathSelectElements("//build:UpdatePeriodically", ns).Remove();
            proj.XPathSelectElements("//build:UpdateRequired", ns).Remove();
            proj.XPathSelectElements("//build:MapFileExtensions", ns).Remove();
            proj.XPathSelectElements("//build:ApplicationRevision", ns).Remove();
            proj.XPathSelectElements("//build:ApplicationVersion", ns).Remove();
            proj.XPathSelectElements("//build:UseApplicationTrust", ns).Remove();
            proj.XPathSelectElements("//build:BootstrapperEnabled", ns).Remove();
            proj.XPathSelectElements("//build:BootstrapperPackage", ns).Remove();
            proj.XPathSelectElements("//build:SccProjectName", ns).Remove();
            proj.XPathSelectElements("//build:SccLocalPath", ns).Remove();
            proj.XPathSelectElements("//build:SccAuxPath", ns).Remove();
            proj.XPathSelectElements("//build:SccProvider", ns).Remove();
            proj.XPathSelectElements("//build:NuGetPackageImportStamp", ns).Remove();

            proj.XPathSelectElements("//build:NoWin32Manifest", ns).Remove();

            proj.XPathSelectElements("//build:EnableSecurityDebugging", ns).Remove();
            proj.XPathSelectElements("//build:StartAction", ns).Remove();
            proj.XPathSelectElements("//build:HostInBrowser", ns).Remove();
            proj.XPathSelectElements("//build:CreateWebPageOnPublish", ns).Remove();
            proj.XPathSelectElements("//build:WebPage", ns).Remove();
            proj.XPathSelectElements("//build:OpenBrowserOnPublish", ns).Remove();
            proj.XPathSelectElements("//build:TrustUrlParameters", ns).Remove();

            proj.XPathSelectElements("//build:UseIISExpress", ns).Remove();
            proj.XPathSelectElements("//build:IISExpressSSLPort", ns).Remove();
            proj.XPathSelectElements("//build:IISExpressAnonymousAuthentication", ns).Remove();
            proj.XPathSelectElements("//build:IISExpressWindowsAuthentication", ns).Remove();
            proj.XPathSelectElements("//build:IISExpressUseClassicPipelineMode", ns).Remove();
            #endregion

            proj.DescendantNodes().OfType<XComment>().Where(c => c.Value.Contains("<Target Name=\"BeforeBuild\">")).Remove();

            #region Remove Folders
            proj.XPathSelectElements(@"//build:Folder", ns).Remove();
            #endregion

            #region Clean up main PropertyGroup
            proj.SetAttributeValue("ToolsVersion", "14.0");

            var mainPG = proj.XPathSelectElement("//build:PropertyGroup[build:ProjectGuid]", ns);
            proj.XPathSelectElements("//build:ProjectType", ns).Remove();
            proj.XPathSelectElements("//build:ProductVersion", ns).Remove();
            proj.XPathSelectElements("//build:SchemaVersion", ns).Remove();
            proj.XPathSelectElements("//build:StartupObject", ns).Where(e => String.IsNullOrWhiteSpace(e.Value)).Remove();
            proj.XPathSelectElements("//build:ApplicationIcon", ns).Where(e => String.IsNullOrWhiteSpace(e.Value)).Remove();

            proj.XPathSelectElements("//build:PropertyGroup[build:ProjectGuid]/build:FileAlignment", ns).Remove();
            proj.XPathSelectElements("//build:PropertyGroup[build:ProjectGuid]/build:WarningLevel", ns).Remove();

            proj.XPathSelectElements("//build:ApplicationIcon", ns).Reparent(mainPG);
            proj.XPathSelectElements("//build:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch", ns).Reparent(mainPG);

            if (frameworkVersion != null)
            {
                proj.XPathSelectElements("//build:TargetFrameworkVersion", ns).SetValue(frameworkVersion);
                if (!string.IsNullOrEmpty(frameworkProfile))
                    proj.XPathSelectElements("//build:TargetFrameworkProfile", ns).SetValue(frameworkProfile);
                else
                    proj.XPathSelectElements("//build:TargetFrameworkProfile", ns).Nodes().Remove();
            }

            proj.XPathSelectElements("//build:ProjectTypeGuids", ns).SetValue(e => e.ToLower());

            var mainOrder = new[] { "Configuration", "Platform", "ProjectGuid", "ProjectTypeGuids", "OutputType", "AppDesignerFolder", "RootNamespace", "AssemblyName", "TargetFrameworkVersion", "TargetFrameworkProfile", "AutoGenerateBindingRedirects", "ApplicationIcon", };
            mainPG.Elements().OrderBy(x => IndexOf(mainOrder, x.Name.LocalName) ?? Int32.MaxValue).Reparent(mainPG);
            #endregion

            #region Sort Configuration items
            var pcOrder = platforms.SelectMany(p => configurations.Select(c => String.Format("'{0}|{1}'", c, p))).ToArray();

            var cpgOrder = new[] { "PlatformTarget", "DebugSymbols", "DebugType", "Optimize", "OutputPath", "DefineConstants", "ErrorReport", "WarningLevel", "AllowUnsafeBlocks", "BaseAddress", "CheckForOverflowUnderflow", "ConfigurationOverrideFile", "DocumentationFile", "FileAlignment", "NoStdLib", "NoWarn", "RegisterForComInterop", "RemoveIntegerChecks", "TreatWarningsAsErrors", "UseVSHostingProcess", "CodeAnalysisIgnoreBuiltInRuleSets", "CodeAnalysisIgnoreBuiltInRules", "RunCodeAnalysis", };

            proj.XPathSelectElements("//*[contains(@Condition, '$(Configuration)|$(Platform)')]", ns).Where(e => !pcOrder.Any(o => e.Attribute("Condition").Value.Contains(o))).Remove();
            foreach (var grouping in proj.XPathSelectElements("//*[contains(@Condition, '$(Configuration)|$(Platform)')]", ns).GroupBy(e => new { p = e.Parent, en = e.Name.LocalName }))
            {
                var previous = grouping.First().PreviousNode;

                var children = grouping.OrderBy(e => IndexOf(pcOrder, o => e.Attribute("Condition").Value.Contains(o)) ?? Int32.MaxValue).ThenBy(e => e.Attribute("Condition").Value.Trim()).ToArray();

                children.Remove();
                previous.AddAfterSelf(children);

                foreach (var cgp in children.Where(e => e.Name.LocalName == "PropertyGroup"))
                {
                    cgp.Elements().OrderBy(e => IndexOf(cpgOrder, e.Name.LocalName) ?? Int32.MaxValue).Reparent(cgp);
                }

                continue;
            }

            proj.XPathSelectElements("//build:DefineConstants", ns).SetValue(e => String.Join(";", e.Value.Split(';').OrderBy(v => v.TrimStart('_')).ThenBy(v => v)));
            #endregion

            #region Clean up Items
            proj.XPathSelectElements("//build:SubType", ns).Where(s => String.IsNullOrWhiteSpace(s.Value)).Remove();
            proj.XPathSelectElements("//*[@Include='app.config']/build:SubType", ns).Remove();
            proj.XPathSelectElements("//build:Compile/build:SubType[text()='Code']", ns).Remove();
            var noDesigner = new[] { ".config", ".xml", ".xsd", ".xslt", ".ejs" };
            proj.XPathSelectElements("//build:*[@Include]/build:SubType[text()='Designer']", ns).Where(s => noDesigner.Contains(Path.GetExtension(s.Parent.Attribute("Include").Value), StringComparer.InvariantCultureIgnoreCase)).Remove();

            foreach (var item in proj.XPathSelectElements("//build:*[@Include]", ns).Where(e => e.Attribute("Include").Value.EndsWith(".xaml", StringComparison.InvariantCultureIgnoreCase) && e.Name.LocalName != "Reference"))
            {
                item.XPathSelectElements(".//build:Generator", ns).Remove();
                item.XPathSelectElements(".//build:SubType", ns).Remove();

                item.AddElement("Generator", content: "MSBuild:Compile", first: true);
                item.AddElement("SubType", content: "Designer", first: true);
            }

            var itemTypes = new[] { "Compile", "Content", "Resource", "EmbeddedResource", "None", "ApplicationDefinition", "Page", "SplashScreen" };

            var items = proj.XPathSelectElements("//build:*[@Include]", ns).Where(e => itemTypes.Contains(e.Name.LocalName)).OrderBy(e => e.Attribute("Include").Value).ToArray();

            foreach (var item in items.Where(e => !e.IsEmpty && !e.HasElements))
            {
                item.RemoveNodes();
            }
            #endregion

            #region Clean up References
            proj.XPathSelectElements("//build:Reference[@Include='System.configuration']", ns).Attributes("Include").SetValue("System.Configuration");
            proj.XPathSelectElements("//build:Reference[@Include='System.XML']", ns).Attributes("Include").SetValue("System.Xml");

            proj.XPathSelectElements("//build:AssemblyFolderKey", ns).Remove();
            proj.XPathSelectElements("//build:SpecificVersion", ns).Remove();
            proj.XPathSelectElements("//build:ReferencePath", ns).Remove();
            proj.XPathSelectElements("//build:CurrentPlatform", ns).Remove();
            proj.XPathSelectElements("//build:Reference/build:Name", ns).Remove();
            proj.XPathSelectElements("//build:Reference/build:RequiredTargetFramework", ns).Remove();

            var referenceParent = proj.XPathSelectElements("//build:ItemGroup[build:Reference]", ns).FirstOrDefault();
            if (referenceParent != null)
            {
                proj.XPathSelectElements("//build:Reference", ns).OrderBy(c => c.Attribute("Include").Value.SubstringTill(',').Replace("System", "aaaaaaa")).Reparent(referenceParent);
            }
            #endregion

            #region Clean up ProjectReferences
            proj.XPathSelectElements("//build:ProjectReference/build:Package", ns).Remove();

            proj.XPathSelectElements("//build:ProjectReference[@Include]/build:Name", ns).SetValue(n => Path.GetFileNameWithoutExtension(n.Parent.Attribute("Include").Value));
            foreach (var name in proj.XPathSelectElements("//build:ProjectReference[@Include]/build:Name", ns))
            {
                var parent = name.Parent;
                name.Remove();
                parent.AddFirst(name);
            }

            var projectReferenceParent = proj.XPathSelectElements("//build:ItemGroup[build:ProjectReference]", ns).FirstOrDefault();
            if (projectReferenceParent != null)
            {
                proj.XPathSelectElements("//build:ProjectReference", ns).OrderBy(c => c.Element(XName.Get("Name", ns.LookupNamespace("build"))).Value).Reparent(projectReferenceParent);
            }

            var imports = proj.XPathSelectElements("//build:Import[starts-with(@Project, '..')]", ns).ToArray();
            foreach (var import in imports)
            {
                var path = import.Attribute("Project").Value;
                import.SetAttributeValue("Condition", String.Format("Exists('{0}')", path));

                continue;
            }
            #endregion

            #region Clean up Web Projects
            proj.XPathSelectElements("//build:SaveServerSettingsInUserFile", ns).SetValue(true);

            proj.XPathSelectElements("//build:WebProjectProperties/build:UseIIS", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:AutoAssignPort", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:DevelopmentServerPort", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:DevelopmentServerVPath", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:IISUrl", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:NTLMAuthentication", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:UseCustomServer", ns).Remove();
            proj.XPathSelectElements("//build:WebProjectProperties/build:CustomServerUrl", ns).Remove();
            #endregion

            #region Clean up PreBuildEvent/PostBuildEvent
            proj.XPathSelectElements("//build:PostBuildEvent", ns).Where(e => e.Value.IndexOf("sn.exe", StringComparison.CurrentCultureIgnoreCase) >= 0).SetValue("");

            proj.XPathSelectElements("//build:PreBuildEvent", ns).Where(e => String.IsNullOrWhiteSpace(e.Value)).Remove();
            proj.XPathSelectElements("//build:PostBuildEvent", ns).Where(e => String.IsNullOrWhiteSpace(e.Value)).Remove();

            if (!proj.XPathSelectElements("//build:PreBuildEvent", ns).Any(e => String.IsNullOrWhiteSpace(e.Value)))
                proj.XPathSelectElements("//build:RunPreBuildEvent", ns).Remove();

            if (!proj.XPathSelectElements("//build:PostBuildEvent", ns).Any(e => String.IsNullOrWhiteSpace(e.Value)))
                proj.XPathSelectElements("//build:RunPostBuildEvent", ns).Remove();
            #endregion

            #region Configure signing
            var canSign = !String.IsNullOrEmpty(relativeSigningKeyPath);

            proj.XPathSelectElements("//build:SignAssembly", ns).Remove();
            proj.XPathSelectElements("//build:DelaySign", ns).Remove();
            proj.XPathSelectElements("//build:AssemblyOriginatorKeyFile", ns).Remove();
            proj.XPathSelectElements("//build:AssemblyKeyContainerName", ns).Remove();

            if (mainPG != null)
            {
                mainPG.AddElement("SignAssembly", content: canSign);
                if (canSign)
                {
                    mainPG.AddElement("DelaySign", content: false);

                    mainPG.AddElement("AssemblyOriginatorKeyFile", content: relativeSigningKeyPath);
                }
            }
            #endregion

            proj.XPathSelectElements("//build:PropertyGroup", ns).Where(e => !e.Nodes().Any()).Remove();
            proj.XPathSelectElements("//build:ItemGroup", ns).Where(e => !e.Nodes().Any()).Remove();
        }
 string IXmlNamespaceResolver.LookupNamespace(string prefix)
 {
     return(readerAsNSResolver.LookupNamespace(prefix));
 }
Exemple #9
0
 string?IXmlNamespaceResolver.LookupNamespace(string prefix)
 {
     return(_readerAsIXmlNamespaceResolver.LookupNamespace(prefix));
 }
        //
        // Constructor & finalizer
        //
        internal XmlWellFormedWriter(XmlWriter writer, XmlWriterSettings settings) {
            Debug.Assert(writer != null);
            Debug.Assert(settings != null);
            Debug.Assert(MaxNamespacesWalkCount <= 3);

            this.writer = writer;

            rawWriter = writer as XmlRawWriter;
            predefinedNamespaces = writer as IXmlNamespaceResolver;
            if (rawWriter != null) {
                rawWriter.NamespaceResolver = new NamespaceResolverProxy(this);
            }

            checkCharacters = settings.CheckCharacters;

            conformanceLevel = settings.ConformanceLevel;
            stateTable = (conformanceLevel == ConformanceLevel.Document) ? StateTableDocument : StateTableAuto;

            currentState = State.Start;

            nsStack = new Namespace[NamespaceStackInitialSize];
            nsStack[0].Set("xmlns", XmlReservedNs.NsXmlNs, NamespaceKind.Special);
            nsStack[1].Set("xml", XmlReservedNs.NsXml, NamespaceKind.Special);
            if (predefinedNamespaces == null) {
                nsStack[2].Set(string.Empty, string.Empty, NamespaceKind.Implied);
            }
            else {
                string defaultNs = predefinedNamespaces.LookupNamespace(string.Empty);
                nsStack[2].Set(string.Empty, (defaultNs == null ? string.Empty : defaultNs), NamespaceKind.Implied);
            }
            nsTop = 2;

            elemScopeStack = new ElementScope[ElementStackInitialSize];
            elemScopeStack[0].Set(string.Empty, string.Empty, string.Empty, nsTop);
            elemScopeStack[0].xmlSpace = XmlSpace.None;
            elemScopeStack[0].xmlLang = null;
            elemTop = 0;

            attrStack = new AttrName[AttributeArrayInitialSize];

            attrValue = new StringBuilder();

            hasher = new SecureStringHasher();
        }
        protected void WriteXPath(XmlWriter writer, IXmlNamespaceResolver resolver)
        {
            // Lex the xpath to find all prefixes used
            int        startChar = 0;
            int        tmp       = 0;
            string     newXPath  = "";
            XPathLexer lexer     = new XPathLexer(xpath, false);
            Dictionary <string, string> prefixMap = new Dictionary <string, string>();
            List <string> prefixes = new List <string>();

            while (lexer.MoveNext())
            {
                string nsPrefix = lexer.Token.Prefix;
                string nsNS     = resolver.LookupNamespace(nsPrefix);

                // Check if we need to write the namespace
                if (nsPrefix.Length > 0 && (nsNS == null || (nsNS != null && nsNS != this.namespaces.LookupNamespace(nsPrefix))))
                {
                    // Write the previous xpath segment
                    if (this.xpath[tmp] == '$')
                    {
                        newXPath += this.xpath.Substring(startChar, tmp - startChar + 1);
                        startChar = tmp + 1;
                    }
                    else
                    {
                        newXPath += this.xpath.Substring(startChar, tmp - startChar);
                        startChar = tmp;
                    }

                    // Check if we need a new prefix
                    if (!prefixMap.ContainsKey(nsPrefix))
                    {
                        prefixes.Add(nsPrefix);
                        if (nsNS != null)
                        {
                            string newPrefix = nsPrefix;
                            int    i         = 0;
                            while (resolver.LookupNamespace(newPrefix) != null || this.namespaces.LookupNamespace(newPrefix) != null)
                            {
                                newPrefix = newPrefix + i.ToString(NumberFormatInfo.InvariantInfo);
                                ++i;
                            }
                            prefixMap.Add(nsPrefix, newPrefix);
                        }
                        else
                        {
                            prefixMap.Add(nsPrefix, nsPrefix);
                        }
                    }

                    // Write the new prefix
                    newXPath += prefixMap[nsPrefix];

                    // Update the xpath marker
                    startChar += nsPrefix.Length;
                }
                tmp = lexer.FirstTokenChar;
            }
            newXPath += this.xpath.Substring(startChar);    // Consume the remainder of the xpath

            // Write the namespaces
            for (int i = 0; i < prefixes.Count; ++i)
            {
                string prefix = prefixes[i];
                writer.WriteAttributeString("xmlns", prefixMap[prefix], null, this.namespaces.LookupNamespace(prefix));
            }

            // Write the XPath
            writer.WriteString(newXPath);
        }
 protected static XmlQualifiedName StringToQName(string value, IXmlNamespaceResolver nsResolver)
 {
     string str;
     string str2;
     value = value.Trim();
     try
     {
         ValidateNames.ParseQNameThrow(value, out str, out str2);
     }
     catch (XmlException exception)
     {
         throw new FormatException(exception.Message);
     }
     if (nsResolver == null)
     {
         throw new InvalidCastException(Res.GetString("XmlConvert_TypeNoNamespace", new object[] { value, str }));
     }
     string ns = nsResolver.LookupNamespace(str);
     if (ns == null)
     {
         throw new InvalidCastException(Res.GetString("XmlConvert_TypeNoNamespace", new object[] { value, str }));
     }
     return new XmlQualifiedName(str2, ns);
 }
Exemple #13
0
        private IEnumerable<XObject> SelectInternal(string path, IXmlNamespaceResolver manager)
        {
            if (path.StartsWith("/"))
            {
                path = path.Substring(1);
            }

            var nodes = (IEnumerable<XObject>) new[] {_obj};
            foreach (var part in path.Split('/'))
            {
                if (part == "*")
                {
                    nodes = nodes.Cast<XContainer>().Elements();
                }
                else if (part == "")
                {
                    nodes = nodes.Cast<XContainer>().Descendants();
                }
                else
                {
                    var isAttribute = part.StartsWith("@");
                    var str = isAttribute ? part.Substring(1) : part;
                    var pos = str.IndexOf(":", StringComparison.Ordinal);
                    var name = pos >= 0
                                   ? XName.Get(str.Substring(pos + 1), manager.LookupNamespace(str.Substring(0, pos)))
                                   : XName.Get(str);
                    if (isAttribute)
                    {
                        nodes = nodes.Cast<XElement>().Attributes(name);
                    }
                    else
                    {
                        nodes = nodes.Cast<XContainer>().Elements(name);
                    }
                }
            }
            return nodes;
        }
Exemple #14
0
 public string GetNamespace(string prefix)
 {
     return(source.LookupNamespace(prefix));
 }
 // Parse a QName from the string, and resolve prefix
 XmlQualifiedName ParseQName(string xpath, ref int pos, IXmlNamespaceResolver xnr) {
     string nm = ParseName(xpath, ref pos);
     if (pos < xpath.Length && ':' == xpath[pos]) {
         pos++;
         string ns = (null==xnr) ? null : xnr.LookupNamespace(nm);
         if (null == ns || 0 == ns.Length)
             throw new XmlException(Res.Sch_UnresolvedPrefix, nm);
         return new XmlQualifiedName(ParseName(xpath, ref pos), ns);
     }
     else {
         return new XmlQualifiedName(nm);
     }
 }
        private static XElement GenerateNewElement(string name, IXmlNamespaceResolver resolver)
        {
            XName newElementName = null;
            if (name.Contains(XPathExtensions.namespaceSeparator))
            {
                if (resolver == null) throw new ArgumentNullException("resolver", "Es wurde keine NamespaceResolver angegeben.");

                var splittedName = name.Split(new [] { XPathExtensions.namespaceSeparator }, StringSplitOptions.None);

                var namespacePraefix = splittedName.Length > 1 ? splittedName[0] : string.Empty;
                var elementName = splittedName.Length > 1 ? splittedName[1] : splittedName[0];

                XNamespace nameSpace = resolver.LookupNamespace(namespacePraefix);
                if (string.IsNullOrEmpty(nameSpace.NamespaceName))
                {
                    throw new InvalidOperationException(string.Format("Es wurde kein Nampespace mit dem Präfix \"{0}\" gefunden.", namespacePraefix));
                }
                newElementName = nameSpace + elementName;
            }
            else
            {
                if(resolver != null)
                {
                    throw new XPathException("Das Element konnte nicht erstellt werden. Es fehlt ein entsprechender Namespace im Pfad.");
                }

                newElementName = name;
            }

            // Neues Element wird erstellt
            return new XElement(newElementName);
        }
 internal XmlAtomicValue(XmlSchemaType xmlType, string value, IXmlNamespaceResolver nsResolver)
 {
     if (value == null)
     {
         throw new ArgumentNullException("value");
     }
     if (xmlType == null)
     {
         throw new ArgumentNullException("xmlType");
     }
     this.xmlType = xmlType;
     this.objVal = value;
     if ((nsResolver != null) && ((this.xmlType.TypeCode == XmlTypeCode.QName) || (this.xmlType.TypeCode == XmlTypeCode.Notation)))
     {
         string prefixFromQName = this.GetPrefixFromQName(value);
         this.nsPrefix = new NamespacePrefixForQName(prefixFromQName, nsResolver.LookupNamespace(prefixFromQName));
     }
 }
Exemple #18
0
		// Methods

		public static XmlQualifiedName ParseQName (string name, IXmlNamespaceResolver resolver)
		{
			int index = name.IndexOf (':');
			if (index < 0)
				return new XmlQualifiedName (name);
			string ns = resolver.LookupNamespace (name.Substring (0, index));
			if (ns == null)
				throw new ArgumentException ("Invalid qualified name.");
			return new XmlQualifiedName (name.Substring (index + 1), ns);
		}
Exemple #19
0
		public override bool Matches(XmlReader reader, IXmlNamespaceResolver resolver)
		{
			bool nsMatches = IsAnyNamespace;
			bool nameMatches = IsAnyName;

			if (!nsMatches)
			{
				string ns = String.Empty;
				if (prefix.Length > 0)
				{
					if (resolver == null)
					{
						throw new ArgumentException(Properties.Resources.NamespaceResolverRequired, "resolver");
					}

					ns = resolver.LookupNamespace(prefix);

					if (ns == null)
					{
						throw new ArgumentException(String.Format(
							CultureInfo.CurrentCulture,
							Properties.Resources.CannotResolvePrefix,
							prefix));
					}
				}

				nsMatches = (ns == reader.NamespaceURI);
			}

			if (!nameMatches)
			{
				nameMatches = (name == reader.LocalName);
			}

			return nsMatches && nameMatches;
		}
        //
        // Constructor & finalizer
        //
        internal XmlWellFormedWriter(XmlWriter writer, XmlWriterSettings settings)
        {
            Debug.Assert(writer != null);
            Debug.Assert(settings != null);
            Debug.Assert(MaxNamespacesWalkCount <= 3);

            _writer = writer;

            _rawWriter = writer as XmlRawWriter;
            _predefinedNamespaces = writer as IXmlNamespaceResolver;
            if (_rawWriter != null)
            {
                _rawWriter.NamespaceResolver = new NamespaceResolverProxy(this);
            }

            _checkCharacters = settings.CheckCharacters;
            _omitDuplNamespaces = (settings.NamespaceHandling & NamespaceHandling.OmitDuplicates) != 0;
            _writeEndDocumentOnClose = settings.WriteEndDocumentOnClose;

            _conformanceLevel = settings.ConformanceLevel;
            _stateTable = (_conformanceLevel == ConformanceLevel.Document) ? s_stateTableDocument : s_stateTableAuto;

            _currentState = State.Start;

            _nsStack = new Namespace[NamespaceStackInitialSize];
            _nsStack[0].Set("xmlns", XmlReservedNs.NsXmlNs, NamespaceKind.Special);
            _nsStack[1].Set("xml", XmlReservedNs.NsXml, NamespaceKind.Special);
            if (_predefinedNamespaces == null)
            {
                _nsStack[2].Set(string.Empty, string.Empty, NamespaceKind.Implied);
            }
            else
            {
                string defaultNs = _predefinedNamespaces.LookupNamespace(string.Empty);
                _nsStack[2].Set(string.Empty, (defaultNs == null ? string.Empty : defaultNs), NamespaceKind.Implied);
            }
            _nsTop = 2;

            _elemScopeStack = new ElementScope[ElementStackInitialSize];
            _elemScopeStack[0].Set(string.Empty, string.Empty, string.Empty, _nsTop);
            _elemScopeStack[0].xmlSpace = XmlSpace.None;
            _elemScopeStack[0].xmlLang = null;
            _elemTop = 0;

            _attrStack = new AttrName[AttributeArrayInitialSize];

            _hasher = new SecureStringHasher();
        }
 internal static XmlQualifiedName Parse(string s, IXmlNamespaceResolver nsmgr, out string prefix)
 {
     string str;
     ValidateNames.ParseQNameThrow(s, out prefix, out str);
     string ns = nsmgr.LookupNamespace(prefix);
     if (ns == null)
     {
         if (prefix.Length != 0)
         {
             throw new XmlException("Xml_UnknownNs", prefix);
         }
         ns = string.Empty;
     }
     return new XmlQualifiedName(str, ns);
 }
Exemple #22
0
        internal static XmlQualifiedName Parse(string s, IXmlNamespaceResolver nsmgr, out string prefix)
        {
            string localName;
            ValidateNames.ParseQNameThrow(s, out prefix, out localName);

            string uri = nsmgr.LookupNamespace(prefix);
            if (uri == null)
            {
                if (prefix.Length != 0)
                {
                    throw new XmlException(SR.Xml_UnknownNs, prefix);
                }
                else
                { //Re-map namespace of empty prefix to string.Empty when there is no default namespace declared
                    uri = string.Empty;
                }
            }
            return new XmlQualifiedName(localName, uri);
        }
Exemple #23
0
        /// <summary>
        /// Parse an xsi:type name
        /// </summary>
        private Type ParseXSITypeName(string xsiTypeName, IXmlNamespaceResolver namespaceResolver)
        {
            // Is there an XSITypeName map that already exists for this type?
            Type retVal = null;

            if (this.s_typeNameMaps.TryGetValue(xsiTypeName, out retVal))
                return retVal;

            // NS Prefix?
            String[] nsTokens = xsiTypeName.Split(':');
            string namespaceUri = "urn:hl7-org:v3";
            if (nsTokens.Length == 2)
            {
                xsiTypeName = nsTokens[1];
                namespaceUri = namespaceResolver.LookupNamespace(nsTokens[0]);
            }

            // Step one, tokenize the parts based on . separator
            String[] tokens = null;
            if(xsiTypeName.Contains("."))
                tokens = new String[] {
                    xsiTypeName.Substring(0, xsiTypeName.LastIndexOf(".") ),
                    xsiTypeName.Substring(xsiTypeName.LastIndexOf(".") + 1)
                };
            else
                tokens = new string[] { 
                    null,
                    xsiTypeName
                };

            // Is the first part an interaction?
            if (tokens.Length == 3)
            {
                // TODO: Predicate will find the mapped type for us
                // TODO: This happens for generics
                throw new NotImplementedException();
            }
            else if (tokens.Length == 2)
            {
                // Find the type that has the specified name and model
                String modelName = tokens[0], structureName = tokens[1];

                Predicate<Type> typeComparator = delegate(Type t)
                {
                    object[] structureAttribute = t.GetCustomAttributes(typeof(StructureAttribute), true);
                    if (structureAttribute.Length > 0 && ((StructureAttribute)structureAttribute[0]).Name == structureName &&
                        (((StructureAttribute)structureAttribute[0]).Model) == modelName &&
                        (((StructureAttribute)structureAttribute[0]).NamespaceUri == namespaceUri))
                        return true;
                    return false;
                };

                // Search for a type that matches
#if WINDOWS_PHONE
                Assembly candidateAssembly = AppDomain.CurrentDomain.GetAssemblies().Find(a => { try { return a.GetTypes().Exists(typeComparator); } catch { return false; } });
                retVal = candidateAssembly.GetTypes().Find(typeComparator);
#else
                Assembly candidateAssembly = Array.Find(AppDomain.CurrentDomain.GetAssemblies(), a => { try { return Array.Exists(a.GetTypes(), typeComparator); } catch { return false; } });
                retVal = Array.Find(candidateAssembly.GetTypes(), typeComparator);
#endif
                lock (this.m_syncRoot)
                    if (!this.s_typeNameMaps.ContainsKey(xsiTypeName))
                        this.RegisterXSITypeName(xsiTypeName, retVal);
            }
            else
                throw new ArgumentException("xsi:type cannot be auto-parsed. Please register it using RegisterXSITypeName");
            return retVal;
        }