Ejemplo n.º 1
0
        private void LoadRoleTypes( out int numErrors )
        {
            numErrors = 0;

            XmlNodeList pTypesList = theDocument.SelectNodes(RTYPE_KEY, theManager);

            if (pTypesList == null || pTypesList.Count == 0)
            {
                return; // nothing to do
            }
            else if (roleTypes == null)
            {
                roleTypes = new Dictionary<string,RoleType>(pTypesList.Count);
            }

            ArrayList labelRoleTypes = new ArrayList();

            foreach (XmlNode node in pTypesList)
            {
                if (node.ChildNodes.Count == 0)
                {
                    ++numWarnings;

                    Common.WriteWarning("XBRLParser.Warning.NoChildrenForNode", errorList, node.OuterXml);
                    continue;
                }

                string id = null;
                string uri = null;

                if (!Common.GetAttribute(node, ID_TAG, ref id, errorList) ||
                    !Common.GetAttribute(node, RURI_TAG, ref uri, errorList))
                {
                    ++numErrors;
                    continue;	// Couldn't find an attribute, just ignore it
                }

                RoleType rt = new RoleType( uri, id, this.schemaFile );

                foreach (XmlNode child in node.ChildNodes)
                {
                    if (child.NodeType == XmlNodeType.Comment) continue;

                    if (child.LocalName == DEF_TAG)
                    {
                        rt.SetDefinition(child.InnerText);
                    }
                    else
                    {
                        try
                        {
                            rt.AddLink(child.InnerText);
                        }
                        catch (ArgumentNullException)
                        {
                            Common.WriteWarning("XBRLParser.Warning.EmptyNode", errorList, child.OuterXml);
                            ++numWarnings;
                        }
                    }
                }

                roleTypes[uri] = rt;

                // if it's a label role type, then we want to union it
                // with the other label roles that were set when we loaded
                // the taxonomy label file.
                if ( RoleTypeDefinesLabelUsage( rt ) )
                {
                    labelRoleTypes.Add( rt.id );
                }

            }

            MergeLanguagesAndLabelRoles( null, labelRoleTypes );
        }