public override string ToString()
        {
            String output = "";

            output += "     Attribute: " + attributeName + "(ID=" + attributeId + ")\n";
            if (value is LinkIDCompound)
            {
                LinkIDCompound compound = (LinkIDCompound)value;
                output += "       Compound:\n";
                output += compound.ToString();
            }
            else
            {
                output += "       value=" + value + "\n";
            }

            return(output);
        }
        private static AttributeType getAttributeType(LinkIDAttribute attribute)
        {
            AttributeType attributeType = new AttributeType();

            attributeType.Name = attribute.attributeName;
            if (null != attribute.attributeId)
            {
                setAttributeId(attributeType, attribute.attributeId);
            }

            if (null != attribute.value)
            {
                if (attribute.value is LinkIDCompound)
                {
                    // wrap members
                    AttributeType compoundValueAttribute = new AttributeType();
                    attributeType.AttributeValue = new AttributeType[] { compoundValueAttribute };

                    // compounded
                    LinkIDCompound       compound = (LinkIDCompound)attribute.value;
                    List <AttributeType> members  = new List <AttributeType>();
                    foreach (LinkIDAttribute member in compound.members)
                    {
                        AttributeType memberAttributeType = new AttributeType();
                        memberAttributeType.Name           = member.attributeName;
                        memberAttributeType.AttributeValue = new Object[] { member.value };
                        members.Add(memberAttributeType);
                    }
                    compoundValueAttribute.AttributeValue = members.ToArray();
                }
                else
                {
                    // single/multi valued
                    attributeType.AttributeValue = new Object[] { attribute.value };
                }
            }
            return(attributeType);
        }