Esempio n. 1
0
        int LoadNameList(out string strError)
        {
            strError = "";

            this.listView_nameList.Items.Clear();

            if (this.MarcDefDom == null)
            {
                return(0);
            }

            XmlNodeList nodes = null;

            if (string.IsNullOrEmpty(this.ParentNameString) == true)
            {
                nodes = this.MarcDefDom.DocumentElement.SelectNodes("Field");
            }
            else
            {
                nodes = this.MarcDefDom.DocumentElement.SelectNodes("Field[@name='" + this.ParentNameString + "']/Subfield");
            }

            for (int i = 0; i < nodes.Count; i++)
            {
                XmlNode node = nodes[i];

                string strName = DomUtil.GetAttr(node, "name");

                if (string.IsNullOrEmpty(this.ParentNameString) == true)
                {
                    if (strName == "###")
                    {
                        continue;   // 跳过头标区
                    }
                }

                string strLabel = "";

                XmlNode nodeProperty = node.SelectSingleNode("Property");
                if (nodeProperty != null)
                {
                    // 从一个元素的下级的多个<strElementName>元素中, 提取语言符合的XmlNode的InnerText
                    // parameters:
                    //      bReturnFirstNode    如果找不到相关语言的,是否返回第一个<strElementName>
                    strLabel = DomUtil.GetXmlLangedNodeText(
                        this.Lang,
                        nodeProperty,
                        "Label",
                        true);
                }

                ListViewItem item = new ListViewItem(strName);
                item.SubItems.Add(strLabel);

                this.listView_nameList.Items.Add(item);
            }

            return(0);
        }
Esempio n. 2
0
        public int Initialize(List <XmlNode> valueListNodes,
                              string strLang,
                              out string strError)
        {
            strError = "";

            Debug.Assert(valueListNodes != null, "Initialize() 的 valueListNodes参数不能为null。");

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());

            nsmgr.AddNamespace("xml", Ns.xml);

            foreach (XmlNode valueListNode in valueListNodes)
            {
                XmlNodeList itemList = valueListNode.SelectNodes("Item");
                foreach (XmlNode itemNode in itemList)
                {
                    string strItemLable = "";

                    // 从一个元素的下级的多个<strElementName>元素中, 提取语言符合的XmlNode的InnerText
                    // parameters:
                    //      bReturnFirstNode    如果找不到相关语言的,是否返回第一个<strElementName>
                    strItemLable = DomUtil.GetXmlLangedNodeText(
                        strLang,
                        itemNode,
                        "Label",
                        true);
                    if (string.IsNullOrEmpty(strItemLable) == true)
                    {
                        strItemLable = "????????";
                    }

#if NO
                    XmlNode itemLabelNode = itemNode.SelectSingleNode("Label[@xml:lang='" + strLang + "']", nsmgr);
                    if (itemLabelNode == null)
                    {
                        strItemLable = "????????";
                    }
                    else
                    {
                        strItemLable = DomUtil.GetNodeText(itemLabelNode);
                    }
#endif

                    XmlNode itemValueNode = itemNode.SelectSingleNode("Value");
                    string  strItemValue  = DomUtil.GetNodeText(itemValueNode);

                    ListViewItem item = new ListViewItem(strItemValue);
                    item.SubItems.Add(strItemLable);
                    this.listView_valueList.Items.Add(item);
                }
            }

            return(0);
        }
Esempio n. 3
0
        int LoadFieldNames(out string strError)
        {
            strError = "";

            this.listView_fieldNameList.Items.Clear();

            if (this.MarcDefDom == null)
            {
                return(0);
            }

            XmlNodeList nodes = this.MarcDefDom.DocumentElement.SelectNodes("Field");

            for (int i = 0; i < nodes.Count; i++)
            {
                XmlNode node = nodes[i];

                string strName = DomUtil.GetAttr(node, "name");

                if (strName == "###")
                {
                    continue;   // 跳过头标区
                }
                string strLabel = "";

                XmlNode nodeProperty = node.SelectSingleNode("Property");
                if (nodeProperty != null)
                {
                    // 从一个元素的下级的多个<strElementName>元素中, 提取语言符合的XmlNode的InnerText
                    // parameters:
                    //      bReturnFirstNode    如果找不到相关语言的,是否返回第一个<strElementName>
                    strLabel = DomUtil.GetXmlLangedNodeText(
                        this.Lang,
                        nodeProperty,
                        "Label",
                        true);
                }

#if NO
                XmlNode nodeLabel = null;
                try
                {
                    if (this.Lang == "")
                    {
                        nodeLabel = node.SelectSingleNode("Property/Label");
                    }
                    else
                    {
                        XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
                        nsmgr.AddNamespace("xml", Ns.xml);
                        nodeLabel = node.SelectSingleNode("Property/Label[@xml:lang='" + this.Lang + "']", nsmgr);
                    }
                }
                catch // 防止字段名中不合法字符用于xpath抛出异常
                {
                    nodeLabel = null;
                }

                string strLabel = "";
                if (nodeLabel != null)
                {
                    strLabel = DomUtil.GetNodeText(nodeLabel);
                }
#endif

                ListViewItem item = new ListViewItem(strName);
                item.SubItems.Add(strLabel);

                this.listView_fieldNameList.Items.Add(item);
            }

            return(0);
        }
Esempio n. 4
0
/*
 *              <Char name='0/5'>
 *                      <Property>
 *                              <Label xml:lang='en'>?</Label>
 *                              <Label xml:lang='cn'>记录长度</Label>
 *                              <Help xml:lang='cn'></Help>
 *                              <ValueList name='header_0/5'>
 *                                      <Item>
 *                                              <Value>?????</Value>
 *                                              <Label xml:lang='cn'>由软件自动填写</Label>
 *                                      </Item>
 *                              </ValueList>
 *                      </Property>
 *              </Char>
 */
        // 通过一个Char节点,初始化本行的值
        // parameter:
        //		node	char节点
        //		strLang	语言版本
        //		strError	出错信息
        // return:
        //		-1	失败
        //		0	成功
        public int Initial(XmlNode node,
                           string strLang,
                           out string strError)
        {
            strError = "";

            if (node == null)
            {
                strError = "调用错误,node参数不能为null";
                Debug.Assert(false, strError);
                return(-1);
            }

            this.m_strName = Trim(DomUtil.GetAttr(node, "name"));
            if (this.m_strName == "")
            {
                strError = "<Char>元素的name属性可能不存在或者值为空,配置文件不合法。";
                Debug.Assert(false, strError);
                return(-1);
            }

            XmlNode propertyNode = node.SelectSingleNode("Property");

            if (propertyNode == null)
            {
                strError = "<Char>元素下级未定义<Property>元素,配置文件不合法";
                Debug.Assert(false, strError);
                return(-1);
            }

            // <Property>/<sensitive>
            if (propertyNode.SelectSingleNode("sensitive") != null)
            {
                this.IsSensitive  = true;
                this.m_lineState |= LineState.Sensitive;
            }
            else
            {
                this.IsSensitive = false;
            }

            // <Property>/<DefaultValue>
            if (propertyNode.SelectSingleNode("DefaultValue") != null)
            {
                this.m_lineState |= LineState.Macro;
            }

            // <Property>/<DefaultValue>
            XmlNode nodeDefaultValue = propertyNode.SelectSingleNode("DefaultValue");

            if (nodeDefaultValue != null)
            {
                this.DefaultValue = nodeDefaultValue.InnerText;
            }

            // 从一个元素的下级的多个<strElementName>元素中, 提取语言符合的XmlNode的InnerText
            // parameters:
            //      bReturnFirstNode    如果找不到相关语言的,是否返回第一个<strElementName>
            this.m_strLabel = DomUtil.GetXmlLangedNodeText(
                strLang,
                propertyNode,
                "Label",
                true);
            if (string.IsNullOrEmpty(this.m_strLabel) == true)
            {
                this.m_strLabel = "<尚未定义>";
            }
            else
            {
                this.m_strLabel = StringUtil.Trim(this.m_strLabel);
            }
#if NO
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
            nsmgr.AddNamespace("xml", Ns.xml);
            XmlNode labelNode = propertyNode.SelectSingleNode("Label[@xml:lang='" + strLang + "']", nsmgr);
            if (labelNode == null ||
                string.IsNullOrEmpty(labelNode.InnerText.Trim()) == true)
            {
                // 如果找不到,则找到第一个有值的
                XmlNodeList nodes = propertyNode.SelectNodes("Label", nsmgr);
                foreach (XmlNode temp_node in nodes)
                {
                    if (string.IsNullOrEmpty(temp_node.InnerText.Trim()) == false)
                    {
                        labelNode = temp_node;
                        break;
                    }
                }

                //Debug.Assert(false,"名称为'" + this.m_strName + "'的<char>元素未定义Label的'" + strLang + "'语言版本的值");
            }
            if (labelNode == null)
            {
                this.m_strLabel = "<尚未定义>";
            }
            else
            {
                this.m_strLabel = Trim(DomUtil.GetNodeText(labelNode));
            }
#endif

            // 给value赋初值
            int nIndex = this.m_strName.IndexOf("/");
            if (nIndex >= 0)
            {
                string strLetterCount = this.m_strName.Substring(nIndex + 1);
                this.m_nValueLength = Convert.ToInt32(strLetterCount);
                this.m_nStart       = Convert.ToInt32(this.m_strName.Substring(0, nIndex));
            }
            if (this.m_strValue == null)
            {
                this.m_strValue = new string('*', this.m_nValueLength);
            }


            XmlNodeList valuelist_nodes = propertyNode.SelectNodes("ValueList");
            this.ValueListNodes = new List <XmlNode>();
            foreach (XmlNode valuelist_node in valuelist_nodes)
            {
                this.ValueListNodes.Add(valuelist_node);
            }

            return(0);
        }
Esempio n. 5
0
/*
 *      <Field name='###' length='24' mandatory='yes' repeatable='no'>
 *              <Property>
 *                      <Label xml:lang='en'>RECORD IDENTIFIER</Label>
 *                      <Label xml:lang='cn'>头标区</Label>
 *                      <Help xml:lang='cn'>帮助信息</Help>
 *              </Property>
 *              <Char name='0/5'>
 *              </Char>
 *              ....
 *      </Field>
 */
        // 初始化TemplateRoot对象
        // parameters:
        //		fieldNode	Field节点
        //		strLang	语言版本
        //		strError	出错信息
        // return:
        //		-1	失败
        //		0	不是定长字段
        //		1	成功
        public int Initial(XmlNode node,
                           string strLang,
                           out string strError)
        {
            strError = "";

            Debug.Assert(node != null, "调用错误,node不能为null");

            this.m_fieldNode = node;
            this.m_strLang   = strLang;


            this.m_strName = DomUtil.GetAttr(node, "name");
            if (this.m_strName == "")
            {
                strError = "<" + node.Name + ">元素的name属性可能不存在或者值为空,配置文件不合法。";
                Debug.Assert(false, strError);
                return(-1);
            }

            XmlNode propertyNode = node.SelectSingleNode("Property");

            if (propertyNode == null)
            {
                // TODO: 需要显示更详细的信息
                XmlNode temp = node.Clone();
                while (temp.ChildNodes.Count > 0)
                {
                    temp.RemoveChild(temp.ChildNodes[0]);
                }
                strError = "在 " + temp.OuterXml + " 元素下级未定义<Property>元素,配置文件不合法.";
                // strError = "在<" + node.Name + ">元素下级未定义<Property>元素,配置文件不合法.";
                // Debug.Assert(false,strError);
                return(-1);
            }

            XmlNodeList charList = node.SelectNodes("Char");

            // 没有<Char>元素,不是字长字段或子字段
            if (charList.Count == 0)
            {
                return(0);
            }
#if NO
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable());
            nsmgr.AddNamespace("xml", Ns.xml);
            XmlNode labelNode = propertyNode.SelectSingleNode("Label[@xml:lang='" + strLang + "']", nsmgr);
            if (labelNode == null)
            {
                this.m_strLabel = "????????";
                Debug.Assert(false, "名称为'" + this.m_strName + "'的<" + node.Name + ">元素未定义Label的'" + strLang + "'语言版本的值");
            }
            this.m_strLabel = DomUtil.GetNodeText(labelNode);
#endif
            // 从一个元素的下级的多个<strElementName>元素中, 提取语言符合的XmlNode的InnerText
            // parameters:
            //      bReturnFirstNode    如果找不到相关语言的,是否返回第一个<strElementName>
            this.m_strLabel = DomUtil.GetXmlLangedNodeText(
                strLang,
                propertyNode,
                "Label",
                true);

            if (this.Lines == null)
            {
                this.Lines = new ArrayList();
            }
            else
            {
                this.Lines.Clear();
            }
            foreach (XmlNode charNode in charList)
            {
                TemplateLine line = new TemplateLine(this,
                                                     charNode,
                                                     strLang);
                this.Lines.Add(line);
            }

            return(1);
        }