string ReadOptionalString(XmlAttributeCollection attrs, string name, string defaultValue, ParseLog parseLog)
        {
            string value = defaultValue;

            XmlAttribute attr = attrs[name];

            if (attr == null)
            {
                return(defaultValue);
            }
            value = attr.Value;
            parseLog.Add(String.Format("{0}={1}", name, value));
            return(value);
        }
        bool ReadString(XmlAttributeCollection attrs, string name, out string value, ParseLog parseLog)
        {
            value = "";

            XmlAttribute attr = attrs[name];

            if (attr == null)
            {
                parseLog.AddError(String.Format("attribute {0} not found", name));
                return(false);
            }
            value = attr.Value;
            parseLog.Add(String.Format("{0}={1}", name, value));
            return(true);
        }