/// <summary>
        /// パッケージの読み込み(再帰処理)
        /// 引数のパッケージノード以下を再帰的に読み込み、 Package, Element をVOに読み込む
        /// </summary>
        /// <param name="pkgvo">(out)パッケージのVO</param>
        /// <param name="parentNode">(in)対象のパッケージのXmlNode</param>
        private void readPackages(PackageVO pkgvo, XmlNode parentNode)
        {
            List <PackageVO> retList        = new List <PackageVO>();
            List <ElementVO> retElementList = new List <ElementVO>();
            List <DiagramVO> retDiagramList = new List <DiagramVO>();

            PackageVO pkg = null;

            foreach (XmlNode pkgNode in parentNode.ChildNodes)
            {
                if ("package".Equals(pkgNode.Name))
                {
                    pkg = readPackageNode(pkgNode);

                    readPackages(pkg, pkgNode);
                    retList.Add(pkg);
                }

                // package配下で elementノードを見つけたら
                if ("element".Equals(pkgNode.Name))
                {
                    // elementノード配下の情報から、 ElementVO を返却する
                    ElementVO elem = ElementsXmlReader.readElement(pkgNode, sortByPosFlg);
                    elem.packageId = pkgvo.packageId;

                    // 強いてelement毎のXMLファイルを読む必要がある場合のみ
                    if (elementFileReadFlg)
                    {
                        // 強いてelement毎のXMLファイルを読む必要がある場合のみ
                        if (ElementsXmlReader.existElementFile(elem.guid))
                        {
                            elem = ElementsXmlReader.readElementFile(elem.guid);
                        }
                    }

                    retElementList.Add(elem);
                }

                // package配下で diagram ノードを見つけたら
                if ("diagram".Equals(pkgNode.Name))
                {
                    retDiagramList.Add(readDiagramNode(pkgNode));
                }
            }

            pkgvo.childPackageList = retList;
            pkgvo.elements         = retElementList;
            pkgvo.diagrams         = retDiagramList;
        }
        /// <summary>
        /// パッケージの読み込み(再帰処理)
        /// 引数のパッケージノード以下を再帰的に読み込み、 Package, Element をVOに読み込む
        /// </summary>
        /// <param name="pkgvo">(out)パッケージのVO</param>
        /// <param name="parentNode">(in)対象のパッケージのXmlNode</param>
        private void readPackages(PackageVO pkgvo, XmlNode parentNode)
        {
            List <PackageVO> retList        = new List <PackageVO>();
            List <ElementVO> retElementList = new List <ElementVO>();
            List <DiagramVO> retDiagramList = new List <DiagramVO>();

            foreach (XmlNode pkgNode in parentNode.ChildNodes)
            {
                if ("package".Equals(pkgNode.Name))
                {
                    PackageVO pkg = new PackageVO();
                    foreach (XmlAttribute attr in pkgNode.Attributes)
                    {
                        switch (attr.Name)
                        {
                        case "name":
                            pkg.name = attr.Value;
                            break;

                        case "guid":
                            pkg.guid = attr.Value;
                            break;

                        case "alias":
                            pkg.alias = attr.Value;
                            break;

                        case "stereotype":
                            pkg.stereoType = attr.Value;
                            break;

                        case "TPos":
                            pkg.treePos = readAttributeIntValue(attr);
                            break;

                        case "changed":
                            pkg.changed = readAttributeCharValue(attr);
                            break;
                        }
                    }

                    readPackages(pkg, pkgNode);
                    retList.Add(pkg);
                }

                // package配下で elementノードを見つけたら
                if ("element".Equals(pkgNode.Name))
                {
                    // elementノード配下の情報から、 ElementVO を返却する
                    ElementVO elem = ElementsXmlReader.readElement(pkgNode, sortByPosFlg);

                    // 強いてelement毎のXMLファイルを読む必要がある場合のみ
                    if (elementFileReadFlg)
                    {
                        // 強いてelement毎のXMLファイルを読む必要がある場合のみ
                        if (ElementsXmlReader.existElementFile(elem.guid))
                        {
                            elem = ElementsXmlReader.readElementFile(elem.guid);
                        }
                    }

                    retElementList.Add(elem);
                }

                // package配下で diagram ノードを見つけたら
                if ("diagram".Equals(pkgNode.Name))
                {
                    retDiagramList.Add(readDiagramNode(pkgNode));
                }
            }

            pkgvo.childPackageList = retList;
            pkgvo.elements         = retElementList;
            pkgvo.diagrams         = retDiagramList;

            // ソート順指定フラグにより、ソート処理が分かれる
            if (sortByPosFlg)
            {
                pkgvo.sortChildNodes();
                //pkgvo.sortChildPackages();
                //pkgvo.sortElements();
            }
            else
            {
                pkgvo.sortChildNodesGuid();
                //pkgvo.sortChildPackagesGUID();
                //pkgvo.sortElementsGUID();
            }
        }